brintos

brintos / llvm-project-archived public Read only

0
0
Text · 3.0 KiB · 0661b86 Raw
109 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_test_checks.py2; RUN: opt -passes=sccp -S %s -o -| FileCheck %s3 4define i64 @test1_sext_op_can_be_undef(i1 %c.1, i1 %c.2) {5; CHECK-LABEL: @test1_sext_op_can_be_undef(6; CHECK-NEXT:    br i1 [[C_1:%.*]], label [[TRUE_1:%.*]], label [[FALSE:%.*]]7; CHECK:       true.1:8; CHECK-NEXT:    br i1 [[C_2:%.*]], label [[TRUE_2:%.*]], label [[EXIT:%.*]]9; CHECK:       true.2:10; CHECK-NEXT:    br label [[EXIT]]11; CHECK:       false:12; CHECK-NEXT:    br label [[EXIT]]13; CHECK:       exit:14; CHECK-NEXT:    [[P:%.*]] = phi i32 [ 0, [[TRUE_1]] ], [ 1, [[TRUE_2]] ], [ undef, [[FALSE]] ]15; CHECK-NEXT:    [[EXT:%.*]] = sext i32 [[P]] to i6416; CHECK-NEXT:    ret i64 [[EXT]]17;18  br i1 %c.1, label %true.1, label %false19 20true.1:21  br i1 %c.2, label %true.2, label %exit22 23true.2:24  br label %exit25 26false:27  br label %exit28 29exit:30  %p = phi i32 [ 0, %true.1 ], [ 1, %true.2], [ undef, %false ]31  %ext = sext i32 %p to i6432  ret i64 %ext33}34 35define i64 @test1_sext_op_can_be_undef_but_frozen(i1 %c.1, i1 %c.2) {36; CHECK-LABEL: @test1_sext_op_can_be_undef_but_frozen(37; CHECK-NEXT:    br i1 [[C_1:%.*]], label [[TRUE_1:%.*]], label [[FALSE:%.*]]38; CHECK:       true.1:39; CHECK-NEXT:    br i1 [[C_2:%.*]], label [[TRUE_2:%.*]], label [[EXIT:%.*]]40; CHECK:       true.2:41; CHECK-NEXT:    br label [[EXIT]]42; CHECK:       false:43; CHECK-NEXT:    br label [[EXIT]]44; CHECK:       exit:45; CHECK-NEXT:    [[P:%.*]] = phi i32 [ 0, [[TRUE_1]] ], [ 1, [[TRUE_2]] ], [ undef, [[FALSE]] ]46; CHECK-NEXT:    [[P_FR:%.*]] = freeze i32 [[P]]47; CHECK-NEXT:    [[EXT:%.*]] = sext i32 [[P_FR]] to i6448; CHECK-NEXT:    ret i64 [[EXT]]49;50  br i1 %c.1, label %true.1, label %false51 52true.1:53  br i1 %c.2, label %true.2, label %exit54 55true.2:56  br label %exit57 58false:59  br label %exit60 61exit:62  %p = phi i32 [ 0, %true.1 ], [ 1, %true.2], [ undef, %false ]63  %p.fr = freeze i32 %p64  %ext = sext i32 %p.fr to i6465  ret i64 %ext66}67 68define i64 @test2(i32 %x) {69; CHECK-LABEL: @test2(70; CHECK-NEXT:    [[P:%.*]] = and i32 [[X:%.*]], 1571; CHECK-NEXT:    [[EXT:%.*]] = zext nneg i32 [[P]] to i6472; CHECK-NEXT:    ret i64 [[EXT]]73;74  %p = and i32 %x, 1575  %ext = sext i32 %p to i6476  ret i64 %ext77}78 79define i64 @test3(i1 %c.1, i1 %c.2) {80; CHECK-LABEL: @test3(81; CHECK-NEXT:    br i1 [[C_1:%.*]], label [[TRUE_1:%.*]], label [[FALSE:%.*]]82; CHECK:       true.1:83; CHECK-NEXT:    br i1 [[C_2:%.*]], label [[TRUE_2:%.*]], label [[EXIT:%.*]]84; CHECK:       true.2:85; CHECK-NEXT:    br label [[EXIT]]86; CHECK:       false:87; CHECK-NEXT:    br label [[EXIT]]88; CHECK:       exit:89; CHECK-NEXT:    [[P:%.*]] = phi i32 [ 0, [[TRUE_1]] ], [ 1, [[TRUE_2]] ], [ 3, [[FALSE]] ]90; CHECK-NEXT:    [[EXT:%.*]] = zext nneg i32 [[P]] to i6491; CHECK-NEXT:    ret i64 [[EXT]]92;93  br i1 %c.1, label %true.1, label %false94 95true.1:96  br i1 %c.2, label %true.2, label %exit97 98true.2:99  br label %exit100 101false:102  br label %exit103 104exit:105  %p = phi i32 [ 0, %true.1 ], [ 1, %true.2], [ 3, %false ]106  %ext = sext i32 %p to i64107  ret i64 %ext108}109