109 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_test_checks.py UTC_ARGS: --version 62; RUN: opt -passes=gvn -S < %s | FileCheck %s3 4define i32 @test1(i32 %x, i32 %y) {5; CHECK-LABEL: define i32 @test1(6; CHECK-SAME: i32 [[X:%.*]], i32 [[Y:%.*]]) {7; CHECK-NEXT: [[ADD1:%.*]] = add i32 [[X]], [[Y]]8; CHECK-NEXT: [[FOO:%.*]] = add i32 [[ADD1]], [[ADD1]]9; CHECK-NEXT: ret i32 [[FOO]]10;11 %add1 = add nsw i32 %x, %y12 %add2 = add i32 %x, %y13 %foo = add i32 %add1, %add214 ret i32 %foo15}16 17define i32 @test2(i32 %x, i32 %y) {18; CHECK-LABEL: define i32 @test2(19; CHECK-SAME: i32 [[X:%.*]], i32 [[Y:%.*]]) {20; CHECK-NEXT: [[ADD1:%.*]] = add i32 [[X]], [[Y]]21; CHECK-NEXT: [[FOO:%.*]] = add i32 [[ADD1]], [[ADD1]]22; CHECK-NEXT: ret i32 [[FOO]]23;24 %add1 = add nuw i32 %x, %y25 %add2 = add i32 %x, %y26 %foo = add i32 %add1, %add227 ret i32 %foo28}29 30define i32 @test3(i32 %x, i32 %y) {31; CHECK-LABEL: define i32 @test3(32; CHECK-SAME: i32 [[X:%.*]], i32 [[Y:%.*]]) {33; CHECK-NEXT: [[ADD1:%.*]] = add i32 [[X]], [[Y]]34; CHECK-NEXT: [[FOO:%.*]] = add i32 [[ADD1]], [[ADD1]]35; CHECK-NEXT: ret i32 [[FOO]]36;37 %add1 = add nuw nsw i32 %x, %y38 %add2 = add i32 %x, %y39 %foo = add i32 %add1, %add240 ret i32 %foo41}42 43define i32 @test4(i32 %x, i32 %y) {44; CHECK-LABEL: define i32 @test4(45; CHECK-SAME: i32 [[X:%.*]], i32 [[Y:%.*]]) {46; CHECK-NEXT: [[ADD1:%.*]] = add nsw i32 [[X]], [[Y]]47; CHECK-NEXT: [[FOO:%.*]] = add i32 [[ADD1]], [[ADD1]]48; CHECK-NEXT: ret i32 [[FOO]]49;50 %add1 = add nsw i32 %x, %y51 %add2 = add nsw i32 %x, %y52 %foo = add i32 %add1, %add253 ret i32 %foo54}55 56define i32 @test5(i32 %x, i32 %y) {57; CHECK-LABEL: define i32 @test5(58; CHECK-SAME: i32 [[X:%.*]], i32 [[Y:%.*]]) {59; CHECK-NEXT: [[ADD1:%.*]] = add i32 [[X]], [[Y]]60; CHECK-NEXT: [[FOO:%.*]] = add i32 [[ADD1]], [[ADD1]]61; CHECK-NEXT: ret i32 [[FOO]]62;63 %add1 = add nuw i32 %x, %y64 %add2 = add nsw i32 %x, %y65 %foo = add i32 %add1, %add266 ret i32 %foo67}68 69define i32 @test6(i32 %x, i32 %y) {70; CHECK-LABEL: define i32 @test6(71; CHECK-SAME: i32 [[X:%.*]], i32 [[Y:%.*]]) {72; CHECK-NEXT: [[ADD1:%.*]] = add nsw i32 [[X]], [[Y]]73; CHECK-NEXT: [[FOO:%.*]] = add i32 [[ADD1]], [[ADD1]]74; CHECK-NEXT: ret i32 [[FOO]]75;76 %add1 = add nuw nsw i32 %x, %y77 %add2 = add nsw i32 %x, %y78 %foo = add i32 %add1, %add279 ret i32 %foo80}81 82define i32 @test7(i32 %x, i32 %y) {83; CHECK-LABEL: define i32 @test7(84; CHECK-SAME: i32 [[X:%.*]], i32 [[Y:%.*]]) {85; CHECK-NEXT: [[ADD1:%.*]] = add i32 [[X]], [[Y]]86; CHECK-NEXT: [[FOO:%.*]] = add i32 [[ADD1]], [[ADD1]]87; CHECK-NEXT: ret i32 [[FOO]]88;89 %add1 = add i32 %x, %y, !what_is_this !{}90 %add2 = add i32 %x, %y91 %foo = add i32 %add1, %add292 ret i32 %foo93}94 95declare void @mumble(i2, i2)96 97define void @test8(i2 %x) {98; CHECK-LABEL: define void @test8(99; CHECK-SAME: i2 [[X:%.*]]) {100; CHECK-NEXT: [[ASHR0:%.*]] = ashr i2 [[X]], 1101; CHECK-NEXT: call void @mumble(i2 [[ASHR0]], i2 [[ASHR0]])102; CHECK-NEXT: ret void103;104 %ashr0 = ashr exact i2 %x, 1105 %ashr1 = ashr i2 %x, 1106 call void @mumble(i2 %ashr0, i2 %ashr1)107 ret void108}109