265 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_test_checks.py2; RUN: opt -passes=instsimplify < %s -S | FileCheck %s3 4define i1 @phi_ugt_non_zero(i8 %x) {5; CHECK-LABEL: @phi_ugt_non_zero(6; CHECK-NEXT: entry:7; CHECK-NEXT: [[CMP:%.*]] = icmp ugt i8 [[X:%.*]], 328; CHECK-NEXT: br i1 [[CMP]], label [[T:%.*]], label [[F:%.*]]9; CHECK: T:10; CHECK-NEXT: ret i1 false11; CHECK: F:12; CHECK-NEXT: br label [[T]]13;14entry:15 %cmp = icmp ugt i8 %x, 3216 br i1 %cmp, label %T, label %F17T:18 %v = phi i8 [ %x, %entry], [-1, %F]19 %r = icmp eq i8 %v, 020 ret i1 %r21F:22 br label %T23}24 25define i1 @phi_uge_non_zero(i8 %x) {26; CHECK-LABEL: @phi_uge_non_zero(27; CHECK-NEXT: entry:28; CHECK-NEXT: [[CMP:%.*]] = icmp uge i8 [[X:%.*]], 3229; CHECK-NEXT: br i1 [[CMP]], label [[T:%.*]], label [[F:%.*]]30; CHECK: T:31; CHECK-NEXT: ret i1 false32; CHECK: F:33; CHECK-NEXT: br label [[T]]34;35entry:36 %cmp = icmp uge i8 %x, 3237 br i1 %cmp, label %T, label %F38T:39 %v = phi i8 [ %x, %entry], [-1, %F]40 %r = icmp eq i8 %v, 041 ret i1 %r42F:43 br label %T44}45 46define i1 @phi_ugt_non_zero_fail(i8 %x) {47; CHECK-LABEL: @phi_ugt_non_zero_fail(48; CHECK-NEXT: entry:49; CHECK-NEXT: [[CMP:%.*]] = icmp ugt i8 [[X:%.*]], 3250; CHECK-NEXT: br i1 [[CMP]], label [[T:%.*]], label [[F:%.*]]51; CHECK: T:52; CHECK-NEXT: [[V:%.*]] = phi i8 [ [[X]], [[ENTRY:%.*]] ], [ 0, [[F]] ]53; CHECK-NEXT: [[R:%.*]] = icmp eq i8 [[V]], 054; CHECK-NEXT: ret i1 [[R]]55; CHECK: F:56; CHECK-NEXT: br label [[T]]57;58entry:59 %cmp = icmp ugt i8 %x, 3260 br i1 %cmp, label %T, label %F61T:62 %v = phi i8 [ %x, %entry], [0, %F]63 %r = icmp eq i8 %v, 064 ret i1 %r65F:66 br label %T67}68 69define i1 @phi_ult_non_zero(i8 %x) {70; CHECK-LABEL: @phi_ult_non_zero(71; CHECK-NEXT: entry:72; CHECK-NEXT: [[CMP:%.*]] = icmp ult i8 [[X:%.*]], 12373; CHECK-NEXT: br i1 [[CMP]], label [[T:%.*]], label [[F:%.*]]74; CHECK: T:75; CHECK-NEXT: br label [[F]]76; CHECK: F:77; CHECK-NEXT: ret i1 false78;79entry:80 %cmp = icmp ult i8 %x, 12381 br i1 %cmp, label %T, label %F82T:83 br label %F84F:85 %v = phi i8 [ %x, %entry], [-1, %T]86 %r = icmp eq i8 %v, 087 ret i1 %r88}89 90define i1 @phi_ule_non_zero(i8 %x) {91; CHECK-LABEL: @phi_ule_non_zero(92; CHECK-NEXT: entry:93; CHECK-NEXT: [[CMP:%.*]] = icmp ule i8 [[X:%.*]], 12394; CHECK-NEXT: br i1 [[CMP]], label [[T:%.*]], label [[F:%.*]]95; CHECK: T:96; CHECK-NEXT: br label [[F]]97; CHECK: F:98; CHECK-NEXT: ret i1 false99;100entry:101 %cmp = icmp ule i8 %x, 123102 br i1 %cmp, label %T, label %F103T:104 br label %F105F:106 %v = phi i8 [ %x, %entry], [-1, %T]107 %r = icmp eq i8 %v, 0108 ret i1 %r109}110 111define i1 @phi_ule_non_zero_fail_wrong_succ(i8 %x) {112; CHECK-LABEL: @phi_ule_non_zero_fail_wrong_succ(113; CHECK-NEXT: entry:114; CHECK-NEXT: [[CMP:%.*]] = icmp ule i8 [[X:%.*]], 123115; CHECK-NEXT: br i1 [[CMP]], label [[T:%.*]], label [[F:%.*]]116; CHECK: T:117; CHECK-NEXT: [[V:%.*]] = phi i8 [ [[X]], [[ENTRY:%.*]] ], [ -1, [[F]] ]118; CHECK-NEXT: [[R:%.*]] = icmp eq i8 [[V]], 0119; CHECK-NEXT: ret i1 [[R]]120; CHECK: F:121; CHECK-NEXT: br label [[T]]122;123entry:124 %cmp = icmp ule i8 %x, 123125 br i1 %cmp, label %T, label %F126T:127 %v = phi i8 [ %x, %entry], [-1, %F]128 %r = icmp eq i8 %v, 0129 ret i1 %r130F:131 br label %T132}133 134define i1 @phi_ult_non_zero_fail(i8 %x) {135; CHECK-LABEL: @phi_ult_non_zero_fail(136; CHECK-NEXT: entry:137; CHECK-NEXT: [[CMP:%.*]] = icmp ult i8 [[X:%.*]], 123138; CHECK-NEXT: [[X2:%.*]] = add i8 [[X]], [[X]]139; CHECK-NEXT: br i1 [[CMP]], label [[T:%.*]], label [[F:%.*]]140; CHECK: T:141; CHECK-NEXT: br label [[F]]142; CHECK: F:143; CHECK-NEXT: [[V:%.*]] = phi i8 [ [[X2]], [[ENTRY:%.*]] ], [ -1, [[T]] ]144; CHECK-NEXT: [[R:%.*]] = icmp eq i8 [[V]], 0145; CHECK-NEXT: ret i1 [[R]]146;147entry:148 %cmp = icmp ult i8 %x, 123149 %x2 = add i8 %x, %x150 br i1 %cmp, label %T, label %F151T:152 br label %F153F:154 %v = phi i8 [ %x2, %entry], [-1, %T]155 %r = icmp eq i8 %v, 0156 ret i1 %r157}158 159define i1 @phi_ne_non_zero(i8 %x) {160; CHECK-LABEL: @phi_ne_non_zero(161; CHECK-NEXT: entry:162; CHECK-NEXT: [[CMP:%.*]] = icmp ne i8 [[X:%.*]], 0163; CHECK-NEXT: br i1 [[CMP]], label [[T:%.*]], label [[F:%.*]]164; CHECK: T:165; CHECK-NEXT: ret i1 false166; CHECK: F:167; CHECK-NEXT: br label [[T]]168;169entry:170 %cmp = icmp ne i8 %x, 0171 br i1 %cmp, label %T, label %F172T:173 %v = phi i8 [ %x, %entry], [-1, %F]174 %r = icmp eq i8 %v, 0175 ret i1 %r176F:177 br label %T178}179 180define i1 @phi_eq_non_zero(i8 %x) {181; CHECK-LABEL: @phi_eq_non_zero(182; CHECK-NEXT: entry:183; CHECK-NEXT: [[CMP:%.*]] = icmp eq i8 [[X:%.*]], 44184; CHECK-NEXT: br i1 [[CMP]], label [[T:%.*]], label [[F:%.*]]185; CHECK: T:186; CHECK-NEXT: ret i1 false187; CHECK: F:188; CHECK-NEXT: br label [[T]]189;190entry:191 %cmp = icmp eq i8 %x, 44192 br i1 %cmp, label %T, label %F193T:194 %v = phi i8 [ %x, %entry], [-1, %F]195 %r = icmp eq i8 %v, 0196 ret i1 %r197F:198 br label %T199}200 201define i1 @phi_eq_non_zero2(i8 %x) {202; CHECK-LABEL: @phi_eq_non_zero2(203; CHECK-NEXT: entry:204; CHECK-NEXT: [[CMP:%.*]] = icmp eq i8 [[X:%.*]], 0205; CHECK-NEXT: br i1 [[CMP]], label [[T:%.*]], label [[F:%.*]]206; CHECK: T:207; CHECK-NEXT: br label [[F]]208; CHECK: F:209; CHECK-NEXT: ret i1 false210;211entry:212 %cmp = icmp eq i8 %x, 0213 br i1 %cmp, label %T, label %F214T:215 br label %F216F:217 %v = phi i8 [ %x, %entry], [-1, %T]218 %r = icmp eq i8 %v, 0219 ret i1 %r220}221 222define i1 @phi_sgt_non_zero(i8 %x) {223; CHECK-LABEL: @phi_sgt_non_zero(224; CHECK-NEXT: entry:225; CHECK-NEXT: [[CMP:%.*]] = icmp sgt i8 [[X:%.*]], 1226; CHECK-NEXT: br i1 [[CMP]], label [[T:%.*]], label [[F:%.*]]227; CHECK: T:228; CHECK-NEXT: ret i1 false229; CHECK: F:230; CHECK-NEXT: br label [[T]]231;232entry:233 %cmp = icmp sgt i8 %x, 1234 br i1 %cmp, label %T, label %F235T:236 %v = phi i8 [ %x, %entry], [-1, %F]237 %r = icmp eq i8 %v, 0238 ret i1 %r239F:240 br label %T241}242 243define i1 @phi_sgt_non_zero_fail(i8 %x) {244; CHECK-LABEL: @phi_sgt_non_zero_fail(245; CHECK-NEXT: entry:246; CHECK-NEXT: [[CMP:%.*]] = icmp sgt i8 [[X:%.*]], -1247; CHECK-NEXT: br i1 [[CMP]], label [[T:%.*]], label [[F:%.*]]248; CHECK: T:249; CHECK-NEXT: [[V:%.*]] = phi i8 [ [[X]], [[ENTRY:%.*]] ], [ -1, [[F]] ]250; CHECK-NEXT: [[R:%.*]] = icmp eq i8 [[V]], 0251; CHECK-NEXT: ret i1 [[R]]252; CHECK: F:253; CHECK-NEXT: br label [[T]]254;255entry:256 %cmp = icmp sgt i8 %x, -1257 br i1 %cmp, label %T, label %F258T:259 %v = phi i8 [ %x, %entry], [-1, %F]260 %r = icmp eq i8 %v, 0261 ret i1 %r262F:263 br label %T264}265