brintos

brintos / llvm-project-archived public Read only

0
0
Text · 3.5 KiB · 10f5fa3 Raw
138 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_test_checks.py2; RUN: opt -passes=ipsccp -S %s -o -| FileCheck %s3 4define i64 @test1(i32 %x) {5; CHECK-LABEL: @test1(6; CHECK-NEXT:    [[C:%.*]] = icmp sgt i32 [[X:%.*]], 07; CHECK-NEXT:    br i1 [[C]], label [[TRUE:%.*]], label [[FALSE:%.*]]8; CHECK:       true:9; CHECK-NEXT:    [[EXT_1:%.*]] = zext nneg i32 [[X]] to i6410; CHECK-NEXT:    ret i64 [[EXT_1]]11; CHECK:       false:12; CHECK-NEXT:    [[EXT_2:%.*]] = sext i32 [[X]] to i6413; CHECK-NEXT:    ret i64 [[EXT_2]]14;15  %c = icmp sgt i32 %x, 016  br i1 %c, label %true, label %false17 18true:19  %ext.1 = sext i32 %x to i6420  ret i64 %ext.121 22false:23  %ext.2 = sext i32 %x to i6424  ret i64 %ext.225}26 27define i64 @test2(i32 %x) {28; CHECK-LABEL: @test2(29; CHECK-NEXT:    [[C:%.*]] = icmp sge i32 [[X:%.*]], 030; CHECK-NEXT:    br i1 [[C]], label [[TRUE:%.*]], label [[FALSE:%.*]]31; CHECK:       true:32; CHECK-NEXT:    [[EXT_1:%.*]] = zext nneg i32 [[X]] to i6433; CHECK-NEXT:    ret i64 [[EXT_1]]34; CHECK:       false:35; CHECK-NEXT:    [[EXT_2:%.*]] = sext i32 [[X]] to i6436; CHECK-NEXT:    ret i64 [[EXT_2]]37;38  %c = icmp sge i32 %x, 039  br i1 %c, label %true, label %false40 41true:42  %ext.1 = sext i32 %x to i6443  ret i64 %ext.144 45false:46  %ext.2 = sext i32 %x to i6447  ret i64 %ext.248}49 50 51define i64 @test3(i32 %x) {52; CHECK-LABEL: @test3(53; CHECK-NEXT:    [[C:%.*]] = icmp sge i32 [[X:%.*]], -154; CHECK-NEXT:    br i1 [[C]], label [[TRUE:%.*]], label [[FALSE:%.*]]55; CHECK:       true:56; CHECK-NEXT:    [[EXT_1:%.*]] = sext i32 [[X]] to i6457; CHECK-NEXT:    ret i64 [[EXT_1]]58; CHECK:       false:59; CHECK-NEXT:    [[EXT_2:%.*]] = sext i32 [[X]] to i6460; CHECK-NEXT:    ret i64 [[EXT_2]]61;62  %c = icmp sge i32 %x, -163  br i1 %c, label %true, label %false64 65true:66  %ext.1 = sext i32 %x to i6467  ret i64 %ext.168 69false:70  %ext.2 = sext i32 %x to i6471  ret i64 %ext.272}73 74define i64 @test4_sext_op_can_be_undef(i1 %c.1, i1 %c.2) {75; CHECK-LABEL: @test4_sext_op_can_be_undef(76; CHECK-NEXT:    br i1 [[C_1:%.*]], label [[TRUE_1:%.*]], label [[FALSE:%.*]]77; CHECK:       true.1:78; CHECK-NEXT:    br i1 [[C_2:%.*]], label [[TRUE_2:%.*]], label [[EXIT:%.*]]79; CHECK:       true.2:80; CHECK-NEXT:    br label [[EXIT]]81; CHECK:       false:82; CHECK-NEXT:    br label [[EXIT]]83; CHECK:       exit:84; CHECK-NEXT:    [[P:%.*]] = phi i32 [ 0, [[TRUE_1]] ], [ 1, [[TRUE_2]] ], [ undef, [[FALSE]] ]85; CHECK-NEXT:    [[EXT:%.*]] = sext i32 [[P]] to i6486; CHECK-NEXT:    ret i64 [[EXT]]87;88  br i1 %c.1, label %true.1, label %false89 90true.1:91  br i1 %c.2, label %true.2, label %exit92 93true.2:94  br label %exit95 96false:97  br label %exit98 99exit:100  %p = phi i32 [ 0, %true.1 ], [ 1, %true.2], [ undef, %false ]101  %ext = sext i32 %p to i64102  ret i64 %ext103}104 105define i64 @test5(i32 %x) {106; CHECK-LABEL: @test5(107; CHECK-NEXT:    [[P:%.*]] = and i32 [[X:%.*]], 15108; CHECK-NEXT:    [[EXT:%.*]] = zext nneg i32 [[P]] to i64109; CHECK-NEXT:    ret i64 [[EXT]]110;111  %p = and i32 %x, 15112  %ext = sext i32 %p to i64113  ret i64 %ext114}115 116; sext is constant folded before sext -> zext conversion.117define i64 @test6(i32 %x) {118; CHECK-LABEL: @test6(119; CHECK-NEXT:    ret i64 10120;121  %ext = sext i32 10 to i64122  ret i64 %ext123}124 125; sext that can be converted to zext feeds another sext.126define i64 @test7(i16 %x) {127; CHECK-LABEL: @test7(128; CHECK-NEXT:    [[P:%.*]] = and i16 [[X:%.*]], 15129; CHECK-NEXT:    [[EXT_1:%.*]] = zext nneg i16 [[P]] to i32130; CHECK-NEXT:    [[EXT_2:%.*]] = sext i32 [[EXT_1]] to i64131; CHECK-NEXT:    ret i64 [[EXT_2]]132;133  %p = and i16 %x, 15134  %ext.1 = sext i16 %p to i32135  %ext.2 = sext i32 %ext.1 to i64136  ret i64 %ext.2137}138