1fb92c070SNoah Goldstein; NOTE: Assertions have been autogenerated by utils/update_test_checks.py 2fb92c070SNoah Goldstein; RUN: opt -passes=instsimplify < %s -S | FileCheck %s 3fb92c070SNoah Goldstein 4fb92c070SNoah Goldsteindefine i1 @phi_ugt_non_zero(i8 %x) { 5fb92c070SNoah Goldstein; CHECK-LABEL: @phi_ugt_non_zero( 6fb92c070SNoah Goldstein; CHECK-NEXT: entry: 7fb92c070SNoah Goldstein; CHECK-NEXT: [[CMP:%.*]] = icmp ugt i8 [[X:%.*]], 32 8fb92c070SNoah Goldstein; CHECK-NEXT: br i1 [[CMP]], label [[T:%.*]], label [[F:%.*]] 9fb92c070SNoah Goldstein; CHECK: T: 10*39e9862eSNoah Goldstein; CHECK-NEXT: ret i1 false 11fb92c070SNoah Goldstein; CHECK: F: 12fb92c070SNoah Goldstein; CHECK-NEXT: br label [[T]] 13fb92c070SNoah Goldstein; 14fb92c070SNoah Goldsteinentry: 15fb92c070SNoah Goldstein %cmp = icmp ugt i8 %x, 32 16fb92c070SNoah Goldstein br i1 %cmp, label %T, label %F 17fb92c070SNoah GoldsteinT: 18fb92c070SNoah Goldstein %v = phi i8 [ %x, %entry], [-1, %F] 19fb92c070SNoah Goldstein %r = icmp eq i8 %v, 0 20fb92c070SNoah Goldstein ret i1 %r 21fb92c070SNoah GoldsteinF: 22fb92c070SNoah Goldstein br label %T 23fb92c070SNoah Goldstein} 24fb92c070SNoah Goldstein 25fb92c070SNoah Goldsteindefine i1 @phi_uge_non_zero(i8 %x) { 26fb92c070SNoah Goldstein; CHECK-LABEL: @phi_uge_non_zero( 27fb92c070SNoah Goldstein; CHECK-NEXT: entry: 28fb92c070SNoah Goldstein; CHECK-NEXT: [[CMP:%.*]] = icmp uge i8 [[X:%.*]], 32 29fb92c070SNoah Goldstein; CHECK-NEXT: br i1 [[CMP]], label [[T:%.*]], label [[F:%.*]] 30fb92c070SNoah Goldstein; CHECK: T: 31*39e9862eSNoah Goldstein; CHECK-NEXT: ret i1 false 32fb92c070SNoah Goldstein; CHECK: F: 33fb92c070SNoah Goldstein; CHECK-NEXT: br label [[T]] 34fb92c070SNoah Goldstein; 35fb92c070SNoah Goldsteinentry: 36fb92c070SNoah Goldstein %cmp = icmp uge i8 %x, 32 37fb92c070SNoah Goldstein br i1 %cmp, label %T, label %F 38fb92c070SNoah GoldsteinT: 39fb92c070SNoah Goldstein %v = phi i8 [ %x, %entry], [-1, %F] 40fb92c070SNoah Goldstein %r = icmp eq i8 %v, 0 41fb92c070SNoah Goldstein ret i1 %r 42fb92c070SNoah GoldsteinF: 43fb92c070SNoah Goldstein br label %T 44fb92c070SNoah Goldstein} 45fb92c070SNoah Goldstein 46fb92c070SNoah Goldsteindefine i1 @phi_ugt_non_zero_fail(i8 %x) { 47fb92c070SNoah Goldstein; CHECK-LABEL: @phi_ugt_non_zero_fail( 48fb92c070SNoah Goldstein; CHECK-NEXT: entry: 49fb92c070SNoah Goldstein; CHECK-NEXT: [[CMP:%.*]] = icmp ugt i8 [[X:%.*]], 32 50fb92c070SNoah Goldstein; CHECK-NEXT: br i1 [[CMP]], label [[T:%.*]], label [[F:%.*]] 51fb92c070SNoah Goldstein; CHECK: T: 52fb92c070SNoah Goldstein; CHECK-NEXT: [[V:%.*]] = phi i8 [ [[X]], [[ENTRY:%.*]] ], [ 0, [[F]] ] 53fb92c070SNoah Goldstein; CHECK-NEXT: [[R:%.*]] = icmp eq i8 [[V]], 0 54fb92c070SNoah Goldstein; CHECK-NEXT: ret i1 [[R]] 55fb92c070SNoah Goldstein; CHECK: F: 56fb92c070SNoah Goldstein; CHECK-NEXT: br label [[T]] 57fb92c070SNoah Goldstein; 58fb92c070SNoah Goldsteinentry: 59fb92c070SNoah Goldstein %cmp = icmp ugt i8 %x, 32 60fb92c070SNoah Goldstein br i1 %cmp, label %T, label %F 61fb92c070SNoah GoldsteinT: 62fb92c070SNoah Goldstein %v = phi i8 [ %x, %entry], [0, %F] 63fb92c070SNoah Goldstein %r = icmp eq i8 %v, 0 64fb92c070SNoah Goldstein ret i1 %r 65fb92c070SNoah GoldsteinF: 66fb92c070SNoah Goldstein br label %T 67fb92c070SNoah Goldstein} 68fb92c070SNoah Goldstein 69fb92c070SNoah Goldsteindefine i1 @phi_ult_non_zero(i8 %x) { 70fb92c070SNoah Goldstein; CHECK-LABEL: @phi_ult_non_zero( 71fb92c070SNoah Goldstein; CHECK-NEXT: entry: 72fb92c070SNoah Goldstein; CHECK-NEXT: [[CMP:%.*]] = icmp ult i8 [[X:%.*]], 123 73fb92c070SNoah Goldstein; CHECK-NEXT: br i1 [[CMP]], label [[T:%.*]], label [[F:%.*]] 74fb92c070SNoah Goldstein; CHECK: T: 75fb92c070SNoah Goldstein; CHECK-NEXT: br label [[F]] 76fb92c070SNoah Goldstein; CHECK: F: 77*39e9862eSNoah Goldstein; CHECK-NEXT: ret i1 false 78fb92c070SNoah Goldstein; 79fb92c070SNoah Goldsteinentry: 80fb92c070SNoah Goldstein %cmp = icmp ult i8 %x, 123 81fb92c070SNoah Goldstein br i1 %cmp, label %T, label %F 82fb92c070SNoah GoldsteinT: 83fb92c070SNoah Goldstein br label %F 84fb92c070SNoah GoldsteinF: 85fb92c070SNoah Goldstein %v = phi i8 [ %x, %entry], [-1, %T] 86fb92c070SNoah Goldstein %r = icmp eq i8 %v, 0 87fb92c070SNoah Goldstein ret i1 %r 88fb92c070SNoah Goldstein} 89fb92c070SNoah Goldstein 90fb92c070SNoah Goldsteindefine i1 @phi_ule_non_zero(i8 %x) { 91fb92c070SNoah Goldstein; CHECK-LABEL: @phi_ule_non_zero( 92fb92c070SNoah Goldstein; CHECK-NEXT: entry: 93fb92c070SNoah Goldstein; CHECK-NEXT: [[CMP:%.*]] = icmp ule i8 [[X:%.*]], 123 94fb92c070SNoah Goldstein; CHECK-NEXT: br i1 [[CMP]], label [[T:%.*]], label [[F:%.*]] 95fb92c070SNoah Goldstein; CHECK: T: 96fb92c070SNoah Goldstein; CHECK-NEXT: br label [[F]] 97fb92c070SNoah Goldstein; CHECK: F: 98*39e9862eSNoah Goldstein; CHECK-NEXT: ret i1 false 99fb92c070SNoah Goldstein; 100fb92c070SNoah Goldsteinentry: 101fb92c070SNoah Goldstein %cmp = icmp ule i8 %x, 123 102fb92c070SNoah Goldstein br i1 %cmp, label %T, label %F 103fb92c070SNoah GoldsteinT: 104fb92c070SNoah Goldstein br label %F 105fb92c070SNoah GoldsteinF: 106fb92c070SNoah Goldstein %v = phi i8 [ %x, %entry], [-1, %T] 107fb92c070SNoah Goldstein %r = icmp eq i8 %v, 0 108fb92c070SNoah Goldstein ret i1 %r 109fb92c070SNoah Goldstein} 110fb92c070SNoah Goldstein 111fb92c070SNoah Goldsteindefine i1 @phi_ule_non_zero_fail_wrong_succ(i8 %x) { 112fb92c070SNoah Goldstein; CHECK-LABEL: @phi_ule_non_zero_fail_wrong_succ( 113fb92c070SNoah Goldstein; CHECK-NEXT: entry: 114fb92c070SNoah Goldstein; CHECK-NEXT: [[CMP:%.*]] = icmp ule i8 [[X:%.*]], 123 115fb92c070SNoah Goldstein; CHECK-NEXT: br i1 [[CMP]], label [[T:%.*]], label [[F:%.*]] 116fb92c070SNoah Goldstein; CHECK: T: 117fb92c070SNoah Goldstein; CHECK-NEXT: [[V:%.*]] = phi i8 [ [[X]], [[ENTRY:%.*]] ], [ -1, [[F]] ] 118fb92c070SNoah Goldstein; CHECK-NEXT: [[R:%.*]] = icmp eq i8 [[V]], 0 119fb92c070SNoah Goldstein; CHECK-NEXT: ret i1 [[R]] 120fb92c070SNoah Goldstein; CHECK: F: 121fb92c070SNoah Goldstein; CHECK-NEXT: br label [[T]] 122fb92c070SNoah Goldstein; 123fb92c070SNoah Goldsteinentry: 124fb92c070SNoah Goldstein %cmp = icmp ule i8 %x, 123 125fb92c070SNoah Goldstein br i1 %cmp, label %T, label %F 126fb92c070SNoah GoldsteinT: 127fb92c070SNoah Goldstein %v = phi i8 [ %x, %entry], [-1, %F] 128fb92c070SNoah Goldstein %r = icmp eq i8 %v, 0 129fb92c070SNoah Goldstein ret i1 %r 130fb92c070SNoah GoldsteinF: 131fb92c070SNoah Goldstein br label %T 132fb92c070SNoah Goldstein} 133fb92c070SNoah Goldstein 134fb92c070SNoah Goldsteindefine i1 @phi_ult_non_zero_fail(i8 %x) { 135fb92c070SNoah Goldstein; CHECK-LABEL: @phi_ult_non_zero_fail( 136fb92c070SNoah Goldstein; CHECK-NEXT: entry: 137fb92c070SNoah Goldstein; CHECK-NEXT: [[CMP:%.*]] = icmp ult i8 [[X:%.*]], 123 138fb92c070SNoah Goldstein; CHECK-NEXT: [[X2:%.*]] = add i8 [[X]], [[X]] 139fb92c070SNoah Goldstein; CHECK-NEXT: br i1 [[CMP]], label [[T:%.*]], label [[F:%.*]] 140fb92c070SNoah Goldstein; CHECK: T: 141fb92c070SNoah Goldstein; CHECK-NEXT: br label [[F]] 142fb92c070SNoah Goldstein; CHECK: F: 143fb92c070SNoah Goldstein; CHECK-NEXT: [[V:%.*]] = phi i8 [ [[X2]], [[ENTRY:%.*]] ], [ -1, [[T]] ] 144fb92c070SNoah Goldstein; CHECK-NEXT: [[R:%.*]] = icmp eq i8 [[V]], 0 145fb92c070SNoah Goldstein; CHECK-NEXT: ret i1 [[R]] 146fb92c070SNoah Goldstein; 147fb92c070SNoah Goldsteinentry: 148fb92c070SNoah Goldstein %cmp = icmp ult i8 %x, 123 149fb92c070SNoah Goldstein %x2 = add i8 %x, %x 150fb92c070SNoah Goldstein br i1 %cmp, label %T, label %F 151fb92c070SNoah GoldsteinT: 152fb92c070SNoah Goldstein br label %F 153fb92c070SNoah GoldsteinF: 154fb92c070SNoah Goldstein %v = phi i8 [ %x2, %entry], [-1, %T] 155fb92c070SNoah Goldstein %r = icmp eq i8 %v, 0 156fb92c070SNoah Goldstein ret i1 %r 157fb92c070SNoah Goldstein} 158fb92c070SNoah Goldstein 159fb92c070SNoah Goldsteindefine i1 @phi_ne_non_zero(i8 %x) { 160fb92c070SNoah Goldstein; CHECK-LABEL: @phi_ne_non_zero( 161fb92c070SNoah Goldstein; CHECK-NEXT: entry: 162fb92c070SNoah Goldstein; CHECK-NEXT: [[CMP:%.*]] = icmp ne i8 [[X:%.*]], 0 163fb92c070SNoah Goldstein; CHECK-NEXT: br i1 [[CMP]], label [[T:%.*]], label [[F:%.*]] 164fb92c070SNoah Goldstein; CHECK: T: 165*39e9862eSNoah Goldstein; CHECK-NEXT: ret i1 false 166fb92c070SNoah Goldstein; CHECK: F: 167fb92c070SNoah Goldstein; CHECK-NEXT: br label [[T]] 168fb92c070SNoah Goldstein; 169fb92c070SNoah Goldsteinentry: 170fb92c070SNoah Goldstein %cmp = icmp ne i8 %x, 0 171fb92c070SNoah Goldstein br i1 %cmp, label %T, label %F 172fb92c070SNoah GoldsteinT: 173fb92c070SNoah Goldstein %v = phi i8 [ %x, %entry], [-1, %F] 174fb92c070SNoah Goldstein %r = icmp eq i8 %v, 0 175fb92c070SNoah Goldstein ret i1 %r 176fb92c070SNoah GoldsteinF: 177fb92c070SNoah Goldstein br label %T 178fb92c070SNoah Goldstein} 179fb92c070SNoah Goldstein 180fb92c070SNoah Goldsteindefine i1 @phi_eq_non_zero(i8 %x) { 181fb92c070SNoah Goldstein; CHECK-LABEL: @phi_eq_non_zero( 182fb92c070SNoah Goldstein; CHECK-NEXT: entry: 183fb92c070SNoah Goldstein; CHECK-NEXT: [[CMP:%.*]] = icmp eq i8 [[X:%.*]], 44 184fb92c070SNoah Goldstein; CHECK-NEXT: br i1 [[CMP]], label [[T:%.*]], label [[F:%.*]] 185fb92c070SNoah Goldstein; CHECK: T: 186*39e9862eSNoah Goldstein; CHECK-NEXT: ret i1 false 187fb92c070SNoah Goldstein; CHECK: F: 188fb92c070SNoah Goldstein; CHECK-NEXT: br label [[T]] 189fb92c070SNoah Goldstein; 190fb92c070SNoah Goldsteinentry: 191fb92c070SNoah Goldstein %cmp = icmp eq i8 %x, 44 192fb92c070SNoah Goldstein br i1 %cmp, label %T, label %F 193fb92c070SNoah GoldsteinT: 194fb92c070SNoah Goldstein %v = phi i8 [ %x, %entry], [-1, %F] 195fb92c070SNoah Goldstein %r = icmp eq i8 %v, 0 196fb92c070SNoah Goldstein ret i1 %r 197fb92c070SNoah GoldsteinF: 198fb92c070SNoah Goldstein br label %T 199fb92c070SNoah Goldstein} 200fb92c070SNoah Goldstein 201fb92c070SNoah Goldsteindefine i1 @phi_eq_non_zero2(i8 %x) { 202fb92c070SNoah Goldstein; CHECK-LABEL: @phi_eq_non_zero2( 203fb92c070SNoah Goldstein; CHECK-NEXT: entry: 204fb92c070SNoah Goldstein; CHECK-NEXT: [[CMP:%.*]] = icmp eq i8 [[X:%.*]], 0 205fb92c070SNoah Goldstein; CHECK-NEXT: br i1 [[CMP]], label [[T:%.*]], label [[F:%.*]] 206fb92c070SNoah Goldstein; CHECK: T: 207fb92c070SNoah Goldstein; CHECK-NEXT: br label [[F]] 208fb92c070SNoah Goldstein; CHECK: F: 209*39e9862eSNoah Goldstein; CHECK-NEXT: ret i1 false 210fb92c070SNoah Goldstein; 211fb92c070SNoah Goldsteinentry: 212fb92c070SNoah Goldstein %cmp = icmp eq i8 %x, 0 213fb92c070SNoah Goldstein br i1 %cmp, label %T, label %F 214fb92c070SNoah GoldsteinT: 215fb92c070SNoah Goldstein br label %F 216fb92c070SNoah GoldsteinF: 217fb92c070SNoah Goldstein %v = phi i8 [ %x, %entry], [-1, %T] 218fb92c070SNoah Goldstein %r = icmp eq i8 %v, 0 219fb92c070SNoah Goldstein ret i1 %r 220fb92c070SNoah Goldstein} 221fb92c070SNoah Goldstein 222fb92c070SNoah Goldsteindefine i1 @phi_sgt_non_zero(i8 %x) { 223fb92c070SNoah Goldstein; CHECK-LABEL: @phi_sgt_non_zero( 224fb92c070SNoah Goldstein; CHECK-NEXT: entry: 225fb92c070SNoah Goldstein; CHECK-NEXT: [[CMP:%.*]] = icmp sgt i8 [[X:%.*]], 1 226fb92c070SNoah Goldstein; CHECK-NEXT: br i1 [[CMP]], label [[T:%.*]], label [[F:%.*]] 227fb92c070SNoah Goldstein; CHECK: T: 228*39e9862eSNoah Goldstein; CHECK-NEXT: ret i1 false 229fb92c070SNoah Goldstein; CHECK: F: 230fb92c070SNoah Goldstein; CHECK-NEXT: br label [[T]] 231fb92c070SNoah Goldstein; 232fb92c070SNoah Goldsteinentry: 233fb92c070SNoah Goldstein %cmp = icmp sgt i8 %x, 1 234fb92c070SNoah Goldstein br i1 %cmp, label %T, label %F 235fb92c070SNoah GoldsteinT: 236fb92c070SNoah Goldstein %v = phi i8 [ %x, %entry], [-1, %F] 237fb92c070SNoah Goldstein %r = icmp eq i8 %v, 0 238fb92c070SNoah Goldstein ret i1 %r 239fb92c070SNoah GoldsteinF: 240fb92c070SNoah Goldstein br label %T 241fb92c070SNoah Goldstein} 242fb92c070SNoah Goldstein 243fb92c070SNoah Goldsteindefine i1 @phi_sgt_non_zero_fail(i8 %x) { 244fb92c070SNoah Goldstein; CHECK-LABEL: @phi_sgt_non_zero_fail( 245fb92c070SNoah Goldstein; CHECK-NEXT: entry: 246fb92c070SNoah Goldstein; CHECK-NEXT: [[CMP:%.*]] = icmp sgt i8 [[X:%.*]], -1 247fb92c070SNoah Goldstein; CHECK-NEXT: br i1 [[CMP]], label [[T:%.*]], label [[F:%.*]] 248fb92c070SNoah Goldstein; CHECK: T: 249fb92c070SNoah Goldstein; CHECK-NEXT: [[V:%.*]] = phi i8 [ [[X]], [[ENTRY:%.*]] ], [ -1, [[F]] ] 250fb92c070SNoah Goldstein; CHECK-NEXT: [[R:%.*]] = icmp eq i8 [[V]], 0 251fb92c070SNoah Goldstein; CHECK-NEXT: ret i1 [[R]] 252fb92c070SNoah Goldstein; CHECK: F: 253fb92c070SNoah Goldstein; CHECK-NEXT: br label [[T]] 254fb92c070SNoah Goldstein; 255fb92c070SNoah Goldsteinentry: 256fb92c070SNoah Goldstein %cmp = icmp sgt i8 %x, -1 257fb92c070SNoah Goldstein br i1 %cmp, label %T, label %F 258fb92c070SNoah GoldsteinT: 259fb92c070SNoah Goldstein %v = phi i8 [ %x, %entry], [-1, %F] 260fb92c070SNoah Goldstein %r = icmp eq i8 %v, 0 261fb92c070SNoah Goldstein ret i1 %r 262fb92c070SNoah GoldsteinF: 263fb92c070SNoah Goldstein br label %T 264fb92c070SNoah Goldstein} 265