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