128 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_test_checks.py UTC_ARGS: --check-globals --version 22; RUN: opt -passes=newgvn -S < %s | FileCheck %s3 4define i32 @test1(ptr %p) {5; CHECK-LABEL: define i32 @test16; CHECK-SAME: (ptr [[P:%.*]]) {7; CHECK-NEXT: [[A:%.*]] = load i32, ptr [[P]], align 4, !range [[RNG0:![0-9]+]]8; CHECK-NEXT: [[C:%.*]] = add i32 [[A]], [[A]]9; CHECK-NEXT: ret i32 [[C]]10;11 %a = load i32, ptr %p, !range !012 %b = load i32, ptr %p, !range !013 %c = add i32 %a, %b14 ret i32 %c15}16 17define i32 @test2(ptr %p) {18; CHECK-LABEL: define i32 @test219; CHECK-SAME: (ptr [[P:%.*]]) {20; CHECK-NEXT: [[A:%.*]] = load i32, ptr [[P]], align 421; CHECK-NEXT: [[C:%.*]] = add i32 [[A]], [[A]]22; CHECK-NEXT: ret i32 [[C]]23;24 %a = load i32, ptr %p, !range !025 %b = load i32, ptr %p26 %c = add i32 %a, %b27 ret i32 %c28}29 30define i32 @test3(ptr %p) {31; CHECK-LABEL: define i32 @test332; CHECK-SAME: (ptr [[P:%.*]]) {33; CHECK-NEXT: [[A:%.*]] = load i32, ptr [[P]], align 4, !range [[RNG1:![0-9]+]]34; CHECK-NEXT: [[C:%.*]] = add i32 [[A]], [[A]]35; CHECK-NEXT: ret i32 [[C]]36;37 %a = load i32, ptr %p, !range !038 %b = load i32, ptr %p, !range !139 %c = add i32 %a, %b40 ret i32 %c41}42 43define i32 @test4(ptr %p) {44; CHECK-LABEL: define i32 @test445; CHECK-SAME: (ptr [[P:%.*]]) {46; CHECK-NEXT: [[A:%.*]] = load i32, ptr [[P]], align 4, !range [[RNG2:![0-9]+]]47; CHECK-NEXT: [[C:%.*]] = add i32 [[A]], [[A]]48; CHECK-NEXT: ret i32 [[C]]49;50 %a = load i32, ptr %p, !range !051 %b = load i32, ptr %p, !range !252 %c = add i32 %a, %b53 ret i32 %c54}55 56define i32 @test5(ptr %p) {57; CHECK-LABEL: define i32 @test558; CHECK-SAME: (ptr [[P:%.*]]) {59; CHECK-NEXT: [[A:%.*]] = load i32, ptr [[P]], align 4, !range [[RNG3:![0-9]+]]60; CHECK-NEXT: [[C:%.*]] = add i32 [[A]], [[A]]61; CHECK-NEXT: ret i32 [[C]]62;63 %a = load i32, ptr %p, !range !364 %b = load i32, ptr %p, !range !465 %c = add i32 %a, %b66 ret i32 %c67}68 69define i32 @test6(ptr %p) {70; CHECK-LABEL: define i32 @test671; CHECK-SAME: (ptr [[P:%.*]]) {72; CHECK-NEXT: [[A:%.*]] = load i32, ptr [[P]], align 4, !range [[RNG4:![0-9]+]]73; CHECK-NEXT: [[C:%.*]] = add i32 [[A]], [[A]]74; CHECK-NEXT: ret i32 [[C]]75;76 %a = load i32, ptr %p, !range !577 %b = load i32, ptr %p, !range !678 %c = add i32 %a, %b79 ret i32 %c80}81 82define i32 @test7(ptr %p) {83; CHECK-LABEL: define i32 @test784; CHECK-SAME: (ptr [[P:%.*]]) {85; CHECK-NEXT: [[A:%.*]] = load i32, ptr [[P]], align 4, !range [[RNG5:![0-9]+]]86; CHECK-NEXT: [[C:%.*]] = add i32 [[A]], [[A]]87; CHECK-NEXT: ret i32 [[C]]88;89 %a = load i32, ptr %p, !range !790 %b = load i32, ptr %p, !range !891 %c = add i32 %a, %b92 ret i32 %c93}94 95define i32 @test8(ptr %p) {96; CHECK-LABEL: define i32 @test897; CHECK-SAME: (ptr [[P:%.*]]) {98; CHECK-NEXT: [[A:%.*]] = load i32, ptr [[P]], align 499; CHECK-NEXT: [[C:%.*]] = add i32 [[A]], [[A]]100; CHECK-NEXT: ret i32 [[C]]101;102 %a = load i32, ptr %p, !range !9103 %b = load i32, ptr %p, !range !10104 %c = add i32 %a, %b105 ret i32 %c106}107 108 109!0 = !{i32 0, i32 2}110!1 = !{i32 3, i32 5}111!2 = !{i32 2, i32 5}112!3 = !{i32 -5, i32 -2}113!4 = !{i32 1, i32 5}114!5 = !{i32 10, i32 1}115!6 = !{i32 12, i32 16}116!7 = !{i32 1, i32 2, i32 3, i32 4}117!8 = !{i32 5, i32 1}118!9 = !{i32 1, i32 5}119!10 = !{i32 5, i32 1}120;.121; CHECK: [[RNG0]] = !{i32 0, i32 2}122; CHECK: [[RNG1]] = !{i32 0, i32 2, i32 3, i32 5}123; CHECK: [[RNG2]] = !{i32 0, i32 5}124; CHECK: [[RNG3]] = !{i32 -5, i32 -2, i32 1, i32 5}125; CHECK: [[RNG4]] = !{i32 10, i32 1}126; CHECK: [[RNG5]] = !{i32 3, i32 4, i32 5, i32 2}127;.128