114 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_test_checks.py2; RUN: opt -passes=constraint-elimination -S %s | FileCheck %s3 4declare void @llvm.assume(i1)5 6define i1 @test(i8 %x, i8 %y) {7; CHECK-LABEL: @test(8; CHECK-NEXT: [[ADD:%.*]] = add nuw nsw i8 [[X:%.*]], [[Y:%.*]]9; CHECK-NEXT: [[CMP_0:%.*]] = icmp uge i8 [[ADD]], 1010; CHECK-NEXT: tail call void @llvm.assume(i1 [[CMP_0]])11; CHECK-NEXT: [[EXT:%.*]] = zext i8 [[X]] to i1612; CHECK-NEXT: [[C_1:%.*]] = icmp uge i16 [[EXT]], 113; CHECK-NEXT: [[RES:%.*]] = xor i1 true, [[C_1]]14; CHECK-NEXT: ret i1 [[RES]]15;16 %add = add nuw nsw i8 %x, %y17 %cmp.0 = icmp uge i8 %add, 1018 tail call void @llvm.assume(i1 %cmp.0)19 %ext = zext i8 %x to i1620 %t.1 = icmp uge i16 %ext, 021 %c.1 = icmp uge i16 %ext, 122 %res = xor i1 %t.1, %c.123 ret i1 %res24}25 26define i1 @test2(i8 %x, i8 %y) {27; CHECK-LABEL: @test2(28; CHECK-NEXT: [[ADD:%.*]] = add nuw nsw i8 [[X:%.*]], [[Y:%.*]]29; CHECK-NEXT: [[CMP_0:%.*]] = icmp uge i8 [[ADD]], 030; CHECK-NEXT: tail call void @llvm.assume(i1 [[CMP_0]])31; CHECK-NEXT: [[EXT:%.*]] = zext i8 [[X]] to i1632; CHECK-NEXT: [[ADD_1:%.*]] = add nuw nsw i16 [[EXT]], 133; CHECK-NEXT: [[C_1:%.*]] = icmp uge i16 [[ADD_1]], 234; CHECK-NEXT: [[RES_1:%.*]] = xor i1 true, [[C_1]]35; CHECK-NEXT: [[RES_2:%.*]] = xor i1 [[RES_1]], false36; CHECK-NEXT: [[C_2:%.*]] = icmp sge i16 [[ADD_1]], 137; CHECK-NEXT: [[RES_3:%.*]] = xor i1 [[RES_2]], [[C_2]]38; CHECK-NEXT: ret i1 [[RES_3]]39;40 %add = add nuw nsw i8 %x, %y41 %cmp.0 = icmp uge i8 %add, 042 tail call void @llvm.assume(i1 %cmp.0)43 %ext = zext i8 %x to i1644 %add.1 = add nuw nsw i16 %ext, 145 %t.1 = icmp uge i16 %add.1, 146 %c.1 = icmp uge i16 %add.1, 247 %f.1 = icmp ult i16 %add.1, 148 %res.1 = xor i1 %t.1, %c.149 %res.2 = xor i1 %res.1, %f.150 %c.2 = icmp sge i16 %add.1, 151 %res.3 = xor i1 %res.2, %c.252 ret i1 %res.353}54 55define i1 @gep_zext_idx(ptr %p, i8 %cnt, i8 %off) {56; CHECK-LABEL: @gep_zext_idx(57; CHECK-NEXT: entry:58; CHECK-NEXT: [[ADD:%.*]] = add nuw nsw i8 [[CNT:%.*]], [[OFF:%.*]]59; CHECK-NEXT: [[CMP:%.*]] = icmp ugt i8 [[ADD]], 1060; CHECK-NEXT: tail call void @llvm.assume(i1 [[CMP]])61; CHECK-NEXT: [[EXT:%.*]] = zext i8 [[CNT]] to i1662; CHECK-NEXT: [[ADD_PTR:%.*]] = getelementptr inbounds i32, ptr [[P:%.*]], i16 [[EXT]]63; CHECK-NEXT: [[GEP_11:%.*]] = getelementptr inbounds i32, ptr [[P]], i16 1164; CHECK-NEXT: [[C_1:%.*]] = icmp ugt ptr [[ADD_PTR]], [[GEP_11]]65; CHECK-NEXT: [[RES_1:%.*]] = xor i1 true, false66; CHECK-NEXT: [[RES_2:%.*]] = xor i1 [[RES_1]], [[C_1]]67; CHECK-NEXT: ret i1 [[RES_2]]68;69entry:70 %add = add nuw nsw i8 %cnt, %off71 %cmp = icmp ugt i8 %add, 1072 tail call void @llvm.assume(i1 %cmp)73 %ext = zext i8 %cnt to i1674 %add.ptr = getelementptr inbounds i32, ptr %p, i16 %ext75 %t.1 = icmp uge ptr %add.ptr, %p76 %f.1 = icmp ult ptr %add.ptr, %p77 %gep.11 = getelementptr inbounds i32, ptr %p, i16 1178 %c.1 = icmp ugt ptr %add.ptr, %gep.1179 %res.1 = xor i1 %t.1, %f.180 %res.2 = xor i1 %res.1, %c.181 ret i1 %res.282}83 84define i1 @gep_zext_idx_adds(ptr %p, i8 %cnt, i8 %off) {85; CHECK-LABEL: @gep_zext_idx_adds(86; CHECK-NEXT: entry:87; CHECK-NEXT: [[ADD:%.*]] = add nuw nsw i8 [[CNT:%.*]], [[OFF:%.*]]88; CHECK-NEXT: [[CMP:%.*]] = icmp uge i8 [[ADD]], 1089; CHECK-NEXT: tail call void @llvm.assume(i1 [[CMP]])90; CHECK-NEXT: [[EXT:%.*]] = zext i8 [[CNT]] to i1691; CHECK-NEXT: [[EXT_1:%.*]] = add nuw nsw i16 [[EXT]], 192; CHECK-NEXT: [[ADD_PTR:%.*]] = getelementptr inbounds i32, ptr [[P:%.*]], i16 [[EXT_1]]93; CHECK-NEXT: [[GEP_11:%.*]] = getelementptr inbounds i32, ptr [[P]], i16 1194; CHECK-NEXT: [[C_1:%.*]] = icmp uge ptr [[ADD_PTR]], [[GEP_11]]95; CHECK-NEXT: [[RES_1:%.*]] = xor i1 true, false96; CHECK-NEXT: [[RES_2:%.*]] = xor i1 [[RES_1]], [[C_1]]97; CHECK-NEXT: ret i1 [[RES_2]]98;99entry:100 %add = add nuw nsw i8 %cnt, %off101 %cmp = icmp uge i8 %add, 10102 tail call void @llvm.assume(i1 %cmp)103 %ext = zext i8 %cnt to i16104 %ext.1 = add nuw nsw i16 %ext, 1105 %add.ptr = getelementptr inbounds i32, ptr %p, i16 %ext.1106 %t.1 = icmp uge ptr %add.ptr, %p107 %f.1 = icmp ult ptr %add.ptr, %p108 %gep.11 = getelementptr inbounds i32, ptr %p, i16 11109 %c.1 = icmp uge ptr %add.ptr, %gep.11110 %res.1 = xor i1 %t.1, %f.1111 %res.2 = xor i1 %res.1, %c.1112 ret i1 %res.2113}114