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