brintos

brintos / llvm-project-archived public Read only

0
0
Text · 2.8 KiB · 89ce59b Raw
97 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_test_checks.py UTC_ARGS: --version 42; RUN: opt -S -passes=correlated-propagation < %s | FileCheck %s3 4declare void @use(i1)5 6define void @test_icmp_from_implied_cond(i32 %a, i32 %b) {7; CHECK-LABEL: define void @test_icmp_from_implied_cond(8; CHECK-SAME: i32 [[A:%.*]], i32 [[B:%.*]]) {9; CHECK-NEXT:    [[A_CMP:%.*]] = icmp ugt i32 [[A]], 3210; CHECK-NEXT:    br i1 [[A_CMP]], label [[END:%.*]], label [[L1:%.*]]11; CHECK:       l1:12; CHECK-NEXT:    [[COND:%.*]] = icmp ult i32 [[B]], [[A]]13; CHECK-NEXT:    br i1 [[COND]], label [[L2:%.*]], label [[END]]14; CHECK:       l2:15; CHECK-NEXT:    call void @use(i1 true)16; CHECK-NEXT:    [[B_CMP2:%.*]] = icmp samesign ult i32 [[B]], 3117; CHECK-NEXT:    call void @use(i1 [[B_CMP2]])18; CHECK-NEXT:    ret void19; CHECK:       end:20; CHECK-NEXT:    ret void21;22  %a.cmp = icmp ugt i32 %a, 3223  br i1 %a.cmp, label %end, label %l124 25l1:26  %cond = icmp ult i32 %b, %a27  br i1 %cond, label %l2, label %end28 29l2:30  %b.cmp1 = icmp ult i32 %b, 3231  call void @use(i1 %b.cmp1)32  %b.cmp2 = icmp ult i32 %b, 3133  call void @use(i1 %b.cmp2)34  ret void35 36end:37  ret void38}39 40define i64 @test_sext_from_implied_cond(i32 %a, i32 %b) {41; CHECK-LABEL: define range(i64 0, 2147483647) i64 @test_sext_from_implied_cond(42; CHECK-SAME: i32 [[A:%.*]], i32 [[B:%.*]]) {43; CHECK-NEXT:    [[A_CMP:%.*]] = icmp slt i32 [[A]], 044; CHECK-NEXT:    br i1 [[A_CMP]], label [[END:%.*]], label [[L1:%.*]]45; CHECK:       l1:46; CHECK-NEXT:    [[COND:%.*]] = icmp ult i32 [[B]], [[A]]47; CHECK-NEXT:    br i1 [[COND]], label [[L2:%.*]], label [[END]]48; CHECK:       l2:49; CHECK-NEXT:    [[SEXT:%.*]] = zext nneg i32 [[B]] to i6450; CHECK-NEXT:    ret i64 [[SEXT]]51; CHECK:       end:52; CHECK-NEXT:    ret i64 053;54  %a.cmp = icmp slt i32 %a, 055  br i1 %a.cmp, label %end, label %l156 57l1:58  %cond = icmp ult i32 %b, %a59  br i1 %cond, label %l2, label %end60 61l2:62  %sext = sext i32 %b to i6463  ret i64 %sext64 65end:66  ret i64 067}68 69define void @test_icmp_from_implied_range(i16 %x, i32 %b) {70; CHECK-LABEL: define void @test_icmp_from_implied_range(71; CHECK-SAME: i16 [[X:%.*]], i32 [[B:%.*]]) {72; CHECK-NEXT:    [[A:%.*]] = zext i16 [[X]] to i3273; CHECK-NEXT:    [[COND:%.*]] = icmp ult i32 [[B]], [[A]]74; CHECK-NEXT:    br i1 [[COND]], label [[L1:%.*]], label [[END:%.*]]75; CHECK:       l1:76; CHECK-NEXT:    call void @use(i1 true)77; CHECK-NEXT:    [[B_CMP2:%.*]] = icmp samesign ult i32 [[B]], 6553478; CHECK-NEXT:    call void @use(i1 [[B_CMP2]])79; CHECK-NEXT:    ret void80; CHECK:       end:81; CHECK-NEXT:    ret void82;83  %a = zext i16 %x to i3284  %cond = icmp ult i32 %b, %a85  br i1 %cond, label %l1, label %end86 87l1:88  %b.cmp1 = icmp ult i32 %b, 6553589  call void @use(i1 %b.cmp1)90  %b.cmp2 = icmp ult i32 %b, 6553491  call void @use(i1 %b.cmp2)92  ret void93 94end:95  ret void96}97