1*9880d681SAndroid Build Coastguard Worker; RUN: opt -basicaa -gvn -S < %s | FileCheck %s 2*9880d681SAndroid Build Coastguard Worker 3*9880d681SAndroid Build Coastguard Workerdefine i32 @test1(i32* %p) { 4*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: @test1(i32* %p) 5*9880d681SAndroid Build Coastguard Worker; CHECK: %a = load i32, i32* %p, !range !0 6*9880d681SAndroid Build Coastguard Worker; CHECK: %c = add i32 %a, %a 7*9880d681SAndroid Build Coastguard Worker %a = load i32, i32* %p, !range !0 8*9880d681SAndroid Build Coastguard Worker %b = load i32, i32* %p, !range !0 9*9880d681SAndroid Build Coastguard Worker %c = add i32 %a, %b 10*9880d681SAndroid Build Coastguard Worker ret i32 %c 11*9880d681SAndroid Build Coastguard Worker} 12*9880d681SAndroid Build Coastguard Worker 13*9880d681SAndroid Build Coastguard Workerdefine i32 @test2(i32* %p) { 14*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: @test2(i32* %p) 15*9880d681SAndroid Build Coastguard Worker; CHECK: %a = load i32, i32* %p 16*9880d681SAndroid Build Coastguard Worker; CHECK-NOT: range 17*9880d681SAndroid Build Coastguard Worker; CHECK: %c = add i32 %a, %a 18*9880d681SAndroid Build Coastguard Worker %a = load i32, i32* %p, !range !0 19*9880d681SAndroid Build Coastguard Worker %b = load i32, i32* %p 20*9880d681SAndroid Build Coastguard Worker %c = add i32 %a, %b 21*9880d681SAndroid Build Coastguard Worker ret i32 %c 22*9880d681SAndroid Build Coastguard Worker} 23*9880d681SAndroid Build Coastguard Worker 24*9880d681SAndroid Build Coastguard Workerdefine i32 @test3(i32* %p) { 25*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: @test3(i32* %p) 26*9880d681SAndroid Build Coastguard Worker; CHECK: %a = load i32, i32* %p, !range ![[DISJOINT_RANGE:[0-9]+]] 27*9880d681SAndroid Build Coastguard Worker; CHECK: %c = add i32 %a, %a 28*9880d681SAndroid Build Coastguard Worker %a = load i32, i32* %p, !range !0 29*9880d681SAndroid Build Coastguard Worker %b = load i32, i32* %p, !range !1 30*9880d681SAndroid Build Coastguard Worker %c = add i32 %a, %b 31*9880d681SAndroid Build Coastguard Worker ret i32 %c 32*9880d681SAndroid Build Coastguard Worker} 33*9880d681SAndroid Build Coastguard Worker 34*9880d681SAndroid Build Coastguard Workerdefine i32 @test4(i32* %p) { 35*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: @test4(i32* %p) 36*9880d681SAndroid Build Coastguard Worker; CHECK: %a = load i32, i32* %p, !range ![[MERGED_RANGE:[0-9]+]] 37*9880d681SAndroid Build Coastguard Worker; CHECK: %c = add i32 %a, %a 38*9880d681SAndroid Build Coastguard Worker %a = load i32, i32* %p, !range !0 39*9880d681SAndroid Build Coastguard Worker %b = load i32, i32* %p, !range !2 40*9880d681SAndroid Build Coastguard Worker %c = add i32 %a, %b 41*9880d681SAndroid Build Coastguard Worker ret i32 %c 42*9880d681SAndroid Build Coastguard Worker} 43*9880d681SAndroid Build Coastguard Worker 44*9880d681SAndroid Build Coastguard Workerdefine i32 @test5(i32* %p) { 45*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: @test5(i32* %p) 46*9880d681SAndroid Build Coastguard Worker; CHECK: %a = load i32, i32* %p, !range ![[MERGED_SIGNED_RANGE:[0-9]+]] 47*9880d681SAndroid Build Coastguard Worker; CHECK: %c = add i32 %a, %a 48*9880d681SAndroid Build Coastguard Worker %a = load i32, i32* %p, !range !3 49*9880d681SAndroid Build Coastguard Worker %b = load i32, i32* %p, !range !4 50*9880d681SAndroid Build Coastguard Worker %c = add i32 %a, %b 51*9880d681SAndroid Build Coastguard Worker ret i32 %c 52*9880d681SAndroid Build Coastguard Worker} 53*9880d681SAndroid Build Coastguard Worker 54*9880d681SAndroid Build Coastguard Workerdefine i32 @test6(i32* %p) { 55*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: @test6(i32* %p) 56*9880d681SAndroid Build Coastguard Worker; CHECK: %a = load i32, i32* %p, !range ![[MERGED_TEST6:[0-9]+]] 57*9880d681SAndroid Build Coastguard Worker; CHECK: %c = add i32 %a, %a 58*9880d681SAndroid Build Coastguard Worker %a = load i32, i32* %p, !range !5 59*9880d681SAndroid Build Coastguard Worker %b = load i32, i32* %p, !range !6 60*9880d681SAndroid Build Coastguard Worker %c = add i32 %a, %b 61*9880d681SAndroid Build Coastguard Worker ret i32 %c 62*9880d681SAndroid Build Coastguard Worker} 63*9880d681SAndroid Build Coastguard Worker 64*9880d681SAndroid Build Coastguard Workerdefine i32 @test7(i32* %p) { 65*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: @test7(i32* %p) 66*9880d681SAndroid Build Coastguard Worker; CHECK: %a = load i32, i32* %p, !range ![[MERGED_TEST7:[0-9]+]] 67*9880d681SAndroid Build Coastguard Worker; CHECK: %c = add i32 %a, %a 68*9880d681SAndroid Build Coastguard Worker %a = load i32, i32* %p, !range !7 69*9880d681SAndroid Build Coastguard Worker %b = load i32, i32* %p, !range !8 70*9880d681SAndroid Build Coastguard Worker %c = add i32 %a, %b 71*9880d681SAndroid Build Coastguard Worker ret i32 %c 72*9880d681SAndroid Build Coastguard Worker} 73*9880d681SAndroid Build Coastguard Worker 74*9880d681SAndroid Build Coastguard Workerdefine i32 @test8(i32* %p) { 75*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: @test8(i32* %p) 76*9880d681SAndroid Build Coastguard Worker; CHECK: %a = load i32, i32* %p 77*9880d681SAndroid Build Coastguard Worker; CHECK-NOT: range 78*9880d681SAndroid Build Coastguard Worker; CHECK: %c = add i32 %a, %a 79*9880d681SAndroid Build Coastguard Worker %a = load i32, i32* %p, !range !9 80*9880d681SAndroid Build Coastguard Worker %b = load i32, i32* %p, !range !10 81*9880d681SAndroid Build Coastguard Worker %c = add i32 %a, %b 82*9880d681SAndroid Build Coastguard Worker ret i32 %c 83*9880d681SAndroid Build Coastguard Worker} 84*9880d681SAndroid Build Coastguard Worker 85*9880d681SAndroid Build Coastguard Worker; CHECK: ![[DISJOINT_RANGE]] = !{i32 0, i32 2, i32 3, i32 5} 86*9880d681SAndroid Build Coastguard Worker; CHECK: ![[MERGED_RANGE]] = !{i32 0, i32 5} 87*9880d681SAndroid Build Coastguard Worker; CHECK: ![[MERGED_SIGNED_RANGE]] = !{i32 -5, i32 -2, i32 1, i32 5} 88*9880d681SAndroid Build Coastguard Worker; CHECK: ![[MERGED_TEST6]] = !{i32 10, i32 1} 89*9880d681SAndroid Build Coastguard Worker; CHECK: ![[MERGED_TEST7]] = !{i32 3, i32 4, i32 5, i32 2} 90*9880d681SAndroid Build Coastguard Worker 91*9880d681SAndroid Build Coastguard Worker!0 = !{i32 0, i32 2} 92*9880d681SAndroid Build Coastguard Worker!1 = !{i32 3, i32 5} 93*9880d681SAndroid Build Coastguard Worker!2 = !{i32 2, i32 5} 94*9880d681SAndroid Build Coastguard Worker!3 = !{i32 -5, i32 -2} 95*9880d681SAndroid Build Coastguard Worker!4 = !{i32 1, i32 5} 96*9880d681SAndroid Build Coastguard Worker!5 = !{i32 10, i32 1} 97*9880d681SAndroid Build Coastguard Worker!6 = !{i32 12, i32 16} 98*9880d681SAndroid Build Coastguard Worker!7 = !{i32 1, i32 2, i32 3, i32 4} 99*9880d681SAndroid Build Coastguard Worker!8 = !{i32 5, i32 1} 100*9880d681SAndroid Build Coastguard Worker!9 = !{i32 1, i32 5} 101*9880d681SAndroid Build Coastguard Worker!10 = !{i32 5, i32 1} 102