96 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_ult() {5; CHECK-LABEL: @test_ult(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]], true10; CHECK-NEXT: ret i1 [[RES_3]]11;12entry:13 %t.0 = icmp ult i8 10, 1114 %f.0 = icmp ult i8 10, 1015 %res.1 = xor i1 %t.0, %f.016 %f.1 = icmp ult i8 10, 917 %res.2 = xor i1 %res.1, %f.118 %t.1 = icmp ult i8 10, -1019 %res.3 = xor i1 %res.2, %t.120 ret i1 %res.321}22 23; Test cases where lhs - rhs results in constant offset.24define i1 @test_ult_gep_1(ptr %base) {25; CHECK-LABEL: @test_ult_gep_1(26; CHECK-NEXT: entry:27; CHECK-NEXT: [[GEP_1:%.*]] = getelementptr inbounds i8, ptr [[BASE:%.*]], i8 128; CHECK-NEXT: [[GEP_0:%.*]] = getelementptr inbounds i8, ptr [[BASE]], i8 029; CHECK-NEXT: [[RES_1:%.*]] = xor i1 true, false30; CHECK-NEXT: [[RES_2:%.*]] = xor i1 [[RES_1]], false31; CHECK-NEXT: ret i1 [[RES_2]]32;33entry:34 %gep.1 = getelementptr inbounds i8, ptr %base, i8 135 %t.0 = icmp ult ptr %base, %gep.136 %gep.0 = getelementptr inbounds i8, ptr %base, i8 037 %f.0 = icmp ult ptr %base, %gep.038 %res.1 = xor i1 %t.0, %f.039 %f.1 = icmp ult ptr %gep.1, %base40 %res.2 = xor i1 %res.1, %f.141 ret i1 %res.242}43 44define i1 @test_ult_gep_2(ptr %base) {45; CHECK-LABEL: @test_ult_gep_2(46; CHECK-NEXT: [[GEP_SUB_1:%.*]] = getelementptr inbounds i8, ptr [[BASE:%.*]], i8 -147; CHECK-NEXT: ret i1 false48;49 %gep.sub.1 = getelementptr inbounds i8, ptr %base, i8 -150 %c.1 = icmp ult ptr %base, %gep.sub.151 ret i1 %c.152}53 54define i1 @test_ult_gep_3(ptr %base) {55; CHECK-LABEL: @test_ult_gep_3(56; CHECK-NEXT: [[GEP_1_NOINBOUNDS:%.*]] = getelementptr i8, ptr [[BASE:%.*]], i8 157; CHECK-NEXT: [[C_1:%.*]] = icmp ult ptr [[BASE]], [[GEP_1_NOINBOUNDS]]58; CHECK-NEXT: ret i1 [[C_1]]59;60 %gep.1.noinbounds = getelementptr i8, ptr %base, i8 161 %c.1 = icmp ult ptr %base, %gep.1.noinbounds62 ret i1 %c.163}64 65define i1 @test_eq() {66; CHECK-LABEL: @test_eq(67; CHECK-NEXT: entry:68; CHECK-NEXT: [[RES_1:%.*]] = xor i1 true, false69; CHECK-NEXT: [[RES_2:%.*]] = xor i1 [[RES_1]], false70; CHECK-NEXT: ret i1 [[RES_2]]71;72entry:73 %f.0 = icmp eq i8 10, 1174 %t.0 = icmp eq i8 10, 1075 %res.1 = xor i1 %t.0, %f.076 %f.1 = icmp eq i8 10, 977 %res.2 = xor i1 %res.1, %f.178 ret i1 %res.279}80 81define i1 @test_ne() {82; CHECK-LABEL: @test_ne(83; CHECK-NEXT: entry:84; CHECK-NEXT: [[RES_1:%.*]] = xor i1 true, false85; CHECK-NEXT: [[RES_2:%.*]] = xor i1 [[RES_1]], true86; CHECK-NEXT: ret i1 [[RES_2]]87;88entry:89 %t.0 = icmp ne i8 10, 1190 %f.0 = icmp ne i8 10, 1091 %res.1 = xor i1 %t.0, %f.092 %t.1 = icmp ne i8 10, 993 %res.2 = xor i1 %res.1, %t.194 ret i1 %res.295}96