92 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_test_checks.py2; RUN: opt -passes=constraint-elimination -S %s | FileCheck %s3 4define i1 @test_slt() {5; CHECK-LABEL: @test_slt(6; CHECK-NEXT: entry:7; CHECK-NEXT: [[RES_1:%.*]] = xor i1 true, false8; CHECK-NEXT: [[RES_2:%.*]] = xor i1 [[RES_1]], false9; CHECK-NEXT: [[RES_3:%.*]] = xor i1 [[RES_2]], false10; CHECK-NEXT: [[RES_4:%.*]] = xor i1 [[RES_3]], true11; CHECK-NEXT: ret i1 [[RES_4]]12;13entry:14 %t.0 = icmp slt i8 10, 1115 %f.0 = icmp slt i8 10, 1016 %res.1 = xor i1 %t.0, %f.017 %f.1 = icmp slt i8 10, 918 %res.2 = xor i1 %res.1, %f.119 %f.2 = icmp slt i8 10, -1020 %res.3 = xor i1 %res.2, %f.221 %t.1 = icmp slt i8 10, 1122 %res.4 = xor i1 %res.3, %t.123 ret i1 %res.424}25 26define i1 @test_sgt() {27; CHECK-LABEL: @test_sgt(28; CHECK-NEXT: entry:29; CHECK-NEXT: [[RES_1:%.*]] = xor i1 true, false30; CHECK-NEXT: [[RES_2:%.*]] = xor i1 [[RES_1]], false31; CHECK-NEXT: [[RES_3:%.*]] = xor i1 [[RES_2]], false32; CHECK-NEXT: [[RES_4:%.*]] = xor i1 [[RES_3]], true33; CHECK-NEXT: ret i1 [[RES_4]]34;35entry:36 %t.0 = icmp sgt i8 11, 1037 %f.0 = icmp sgt i8 10, 1038 %res.1 = xor i1 %t.0, %f.039 %f.1 = icmp sgt i8 9, 1040 %res.2 = xor i1 %res.1, %f.141 %f.2 = icmp sgt i8 -10, 1042 %res.3 = xor i1 %res.2, %f.243 %t.1 = icmp sgt i8 -1, -244 %res.4 = xor i1 %res.3, %t.145 ret i1 %res.446}47 48; Test cases where lhs - rhs results in constant offset.49define i1 @test_slt_gep_1(ptr %base) {50; CHECK-LABEL: @test_slt_gep_1(51; CHECK-NEXT: entry:52; CHECK-NEXT: [[GEP_1:%.*]] = getelementptr inbounds i8, ptr [[BASE:%.*]], i8 153; CHECK-NEXT: [[T_0:%.*]] = icmp slt ptr [[BASE]], [[GEP_1]]54; CHECK-NEXT: [[GEP_0:%.*]] = getelementptr inbounds i8, ptr [[BASE]], i8 055; CHECK-NEXT: [[RES_1:%.*]] = xor i1 [[T_0]], false56; CHECK-NEXT: [[C_1:%.*]] = icmp slt ptr [[GEP_1]], [[BASE]]57; CHECK-NEXT: [[RES_2:%.*]] = xor i1 [[RES_1]], [[C_1]]58; CHECK-NEXT: ret i1 [[RES_2]]59;60entry:61 %gep.1 = getelementptr inbounds i8, ptr %base, i8 162 %t.0 = icmp slt ptr %base, %gep.163 %gep.0 = getelementptr inbounds i8, ptr %base, i8 064 %f.0 = icmp slt ptr %base, %gep.065 %res.1 = xor i1 %t.0, %f.066 %c.1 = icmp slt ptr %gep.1, %base67 %res.2 = xor i1 %res.1, %c.168 ret i1 %res.269}70 71define i1 @test_slt_gep_2(ptr %base) {72; CHECK-LABEL: @test_slt_gep_2(73; CHECK-NEXT: [[GEP_SUB_1:%.*]] = getelementptr inbounds i8, ptr [[BASE:%.*]], i8 -174; CHECK-NEXT: [[C_1:%.*]] = icmp slt ptr [[BASE]], [[GEP_SUB_1]]75; CHECK-NEXT: ret i1 [[C_1]]76;77 %gep.sub.1 = getelementptr inbounds i8, ptr %base, i8 -178 %c.1 = icmp slt ptr %base, %gep.sub.179 ret i1 %c.180}81 82define i1 @test_slt_gep_3(ptr %base) {83; CHECK-LABEL: @test_slt_gep_3(84; CHECK-NEXT: [[GEP_1_NOINBOUNDS:%.*]] = getelementptr i8, ptr [[BASE:%.*]], i8 185; CHECK-NEXT: [[C_1:%.*]] = icmp slt ptr [[BASE]], [[GEP_1_NOINBOUNDS]]86; CHECK-NEXT: ret i1 [[C_1]]87;88 %gep.1.noinbounds = getelementptr i8, ptr %base, i8 189 %c.1 = icmp slt ptr %base, %gep.1.noinbounds90 ret i1 %c.191}92