1359345d6SNikita Popov; NOTE: Assertions have been autogenerated by utils/update_test_checks.py 2*b280ee1dSBjorn Pettersson; RUN: opt < %s -passes=instsimplify -S | FileCheck %s 3359345d6SNikita Popov 4359345d6SNikita Popovdefine i1 @zext_uge_sext(i32 %x) { 5359345d6SNikita Popov; CHECK-LABEL: @zext_uge_sext( 6359345d6SNikita Popov; CHECK-NEXT: [[SEXT:%.*]] = sext i32 [[X:%.*]] to i64 7359345d6SNikita Popov; CHECK-NEXT: [[ZEXT:%.*]] = zext i32 [[X]] to i64 8359345d6SNikita Popov; CHECK-NEXT: [[CMP:%.*]] = icmp uge i64 [[ZEXT]], [[SEXT]] 9359345d6SNikita Popov; CHECK-NEXT: ret i1 [[CMP]] 10359345d6SNikita Popov; 11359345d6SNikita Popov %sext = sext i32 %x to i64 12359345d6SNikita Popov %zext = zext i32 %x to i64 13359345d6SNikita Popov %cmp = icmp uge i64 %zext, %sext 14359345d6SNikita Popov ret i1 %cmp 15359345d6SNikita Popov} 16359345d6SNikita Popov 17359345d6SNikita Popovdefine i1 @zext_ugt_sext(i32 %x) { 18359345d6SNikita Popov; CHECK-LABEL: @zext_ugt_sext( 193b671022SNikita Popov; CHECK-NEXT: ret i1 false 20359345d6SNikita Popov; 21359345d6SNikita Popov %sext = sext i32 %x to i64 22359345d6SNikita Popov %zext = zext i32 %x to i64 23359345d6SNikita Popov %cmp = icmp ugt i64 %zext, %sext 24359345d6SNikita Popov ret i1 %cmp 25359345d6SNikita Popov} 26359345d6SNikita Popov 27359345d6SNikita Popovdefine i1 @zext_ult_sext(i32 %x) { 28359345d6SNikita Popov; CHECK-LABEL: @zext_ult_sext( 29359345d6SNikita Popov; CHECK-NEXT: [[SEXT:%.*]] = sext i32 [[X:%.*]] to i64 30359345d6SNikita Popov; CHECK-NEXT: [[ZEXT:%.*]] = zext i32 [[X]] to i64 31359345d6SNikita Popov; CHECK-NEXT: [[CMP:%.*]] = icmp ult i64 [[ZEXT]], [[SEXT]] 32359345d6SNikita Popov; CHECK-NEXT: ret i1 [[CMP]] 33359345d6SNikita Popov; 34359345d6SNikita Popov %sext = sext i32 %x to i64 35359345d6SNikita Popov %zext = zext i32 %x to i64 36359345d6SNikita Popov %cmp = icmp ult i64 %zext, %sext 37359345d6SNikita Popov ret i1 %cmp 38359345d6SNikita Popov} 39359345d6SNikita Popov 40359345d6SNikita Popovdefine i1 @zext_ule_sext(i32 %x) { 41359345d6SNikita Popov; CHECK-LABEL: @zext_ule_sext( 423b671022SNikita Popov; CHECK-NEXT: ret i1 true 43359345d6SNikita Popov; 44359345d6SNikita Popov %sext = sext i32 %x to i64 45359345d6SNikita Popov %zext = zext i32 %x to i64 46359345d6SNikita Popov %cmp = icmp ule i64 %zext, %sext 47359345d6SNikita Popov ret i1 %cmp 48359345d6SNikita Popov} 49359345d6SNikita Popov 50359345d6SNikita Popovdefine i1 @zext_sge_sext(i32 %x) { 51359345d6SNikita Popov; CHECK-LABEL: @zext_sge_sext( 523b671022SNikita Popov; CHECK-NEXT: ret i1 true 53359345d6SNikita Popov; 54359345d6SNikita Popov %sext = sext i32 %x to i64 55359345d6SNikita Popov %zext = zext i32 %x to i64 56359345d6SNikita Popov %cmp = icmp sge i64 %zext, %sext 57359345d6SNikita Popov ret i1 %cmp 58359345d6SNikita Popov} 59359345d6SNikita Popov 60359345d6SNikita Popovdefine i1 @zext_sgt_sext(i32 %x) { 61359345d6SNikita Popov; CHECK-LABEL: @zext_sgt_sext( 62359345d6SNikita Popov; CHECK-NEXT: [[SEXT:%.*]] = sext i32 [[X:%.*]] to i64 63359345d6SNikita Popov; CHECK-NEXT: [[ZEXT:%.*]] = zext i32 [[X]] to i64 64359345d6SNikita Popov; CHECK-NEXT: [[CMP:%.*]] = icmp sgt i64 [[ZEXT]], [[SEXT]] 65359345d6SNikita Popov; CHECK-NEXT: ret i1 [[CMP]] 66359345d6SNikita Popov; 67359345d6SNikita Popov %sext = sext i32 %x to i64 68359345d6SNikita Popov %zext = zext i32 %x to i64 69359345d6SNikita Popov %cmp = icmp sgt i64 %zext, %sext 70359345d6SNikita Popov ret i1 %cmp 71359345d6SNikita Popov} 72359345d6SNikita Popov 73359345d6SNikita Popovdefine i1 @zext_slt_sext(i32 %x) { 74359345d6SNikita Popov; CHECK-LABEL: @zext_slt_sext( 753b671022SNikita Popov; CHECK-NEXT: ret i1 false 76359345d6SNikita Popov; 77359345d6SNikita Popov %sext = sext i32 %x to i64 78359345d6SNikita Popov %zext = zext i32 %x to i64 79359345d6SNikita Popov %cmp = icmp slt i64 %zext, %sext 80359345d6SNikita Popov ret i1 %cmp 81359345d6SNikita Popov} 82359345d6SNikita Popov 83359345d6SNikita Popovdefine i1 @zext_sle_sext(i32 %x) { 84359345d6SNikita Popov; CHECK-LABEL: @zext_sle_sext( 85359345d6SNikita Popov; CHECK-NEXT: [[SEXT:%.*]] = sext i32 [[X:%.*]] to i64 86359345d6SNikita Popov; CHECK-NEXT: [[ZEXT:%.*]] = zext i32 [[X]] to i64 87359345d6SNikita Popov; CHECK-NEXT: [[CMP:%.*]] = icmp sle i64 [[ZEXT]], [[SEXT]] 88359345d6SNikita Popov; CHECK-NEXT: ret i1 [[CMP]] 89359345d6SNikita Popov; 90359345d6SNikita Popov %sext = sext i32 %x to i64 91359345d6SNikita Popov %zext = zext i32 %x to i64 92359345d6SNikita Popov %cmp = icmp sle i64 %zext, %sext 93359345d6SNikita Popov ret i1 %cmp 94359345d6SNikita Popov} 95359345d6SNikita Popov 96359345d6SNikita Popovdefine i1 @sext_uge_zext(i32 %x) { 97359345d6SNikita Popov; CHECK-LABEL: @sext_uge_zext( 983b671022SNikita Popov; CHECK-NEXT: ret i1 true 99359345d6SNikita Popov; 100359345d6SNikita Popov %sext = sext i32 %x to i64 101359345d6SNikita Popov %zext = zext i32 %x to i64 102359345d6SNikita Popov %cmp = icmp uge i64 %sext, %zext 103359345d6SNikita Popov ret i1 %cmp 104359345d6SNikita Popov} 105359345d6SNikita Popov 106359345d6SNikita Popovdefine i1 @sext_ugt_zext(i32 %x) { 107359345d6SNikita Popov; CHECK-LABEL: @sext_ugt_zext( 108359345d6SNikita Popov; CHECK-NEXT: [[SEXT:%.*]] = sext i32 [[X:%.*]] to i64 109359345d6SNikita Popov; CHECK-NEXT: [[ZEXT:%.*]] = zext i32 [[X]] to i64 110359345d6SNikita Popov; CHECK-NEXT: [[CMP:%.*]] = icmp ugt i64 [[SEXT]], [[ZEXT]] 111359345d6SNikita Popov; CHECK-NEXT: ret i1 [[CMP]] 112359345d6SNikita Popov; 113359345d6SNikita Popov %sext = sext i32 %x to i64 114359345d6SNikita Popov %zext = zext i32 %x to i64 115359345d6SNikita Popov %cmp = icmp ugt i64 %sext, %zext 116359345d6SNikita Popov ret i1 %cmp 117359345d6SNikita Popov} 118359345d6SNikita Popov 119359345d6SNikita Popovdefine i1 @sext_ult_zext(i32 %x) { 120359345d6SNikita Popov; CHECK-LABEL: @sext_ult_zext( 1213b671022SNikita Popov; CHECK-NEXT: ret i1 false 122359345d6SNikita Popov; 123359345d6SNikita Popov %sext = sext i32 %x to i64 124359345d6SNikita Popov %zext = zext i32 %x to i64 125359345d6SNikita Popov %cmp = icmp ult i64 %sext, %zext 126359345d6SNikita Popov ret i1 %cmp 127359345d6SNikita Popov} 128359345d6SNikita Popov 129359345d6SNikita Popovdefine i1 @sext_ule_zext(i32 %x) { 130359345d6SNikita Popov; CHECK-LABEL: @sext_ule_zext( 131359345d6SNikita Popov; CHECK-NEXT: [[SEXT:%.*]] = sext i32 [[X:%.*]] to i64 132359345d6SNikita Popov; CHECK-NEXT: [[ZEXT:%.*]] = zext i32 [[X]] to i64 133359345d6SNikita Popov; CHECK-NEXT: [[CMP:%.*]] = icmp ule i64 [[SEXT]], [[ZEXT]] 134359345d6SNikita Popov; CHECK-NEXT: ret i1 [[CMP]] 135359345d6SNikita Popov; 136359345d6SNikita Popov %sext = sext i32 %x to i64 137359345d6SNikita Popov %zext = zext i32 %x to i64 138359345d6SNikita Popov %cmp = icmp ule i64 %sext, %zext 139359345d6SNikita Popov ret i1 %cmp 140359345d6SNikita Popov} 141359345d6SNikita Popov 142359345d6SNikita Popovdefine i1 @sext_sge_zext(i32 %x) { 143359345d6SNikita Popov; CHECK-LABEL: @sext_sge_zext( 144359345d6SNikita Popov; CHECK-NEXT: [[SEXT:%.*]] = sext i32 [[X:%.*]] to i64 145359345d6SNikita Popov; CHECK-NEXT: [[ZEXT:%.*]] = zext i32 [[X]] to i64 146359345d6SNikita Popov; CHECK-NEXT: [[CMP:%.*]] = icmp sge i64 [[SEXT]], [[ZEXT]] 147359345d6SNikita Popov; CHECK-NEXT: ret i1 [[CMP]] 148359345d6SNikita Popov; 149359345d6SNikita Popov %sext = sext i32 %x to i64 150359345d6SNikita Popov %zext = zext i32 %x to i64 151359345d6SNikita Popov %cmp = icmp sge i64 %sext, %zext 152359345d6SNikita Popov ret i1 %cmp 153359345d6SNikita Popov} 154359345d6SNikita Popov 155359345d6SNikita Popovdefine i1 @sext_sgt_zext(i32 %x) { 156359345d6SNikita Popov; CHECK-LABEL: @sext_sgt_zext( 1573b671022SNikita Popov; CHECK-NEXT: ret i1 false 158359345d6SNikita Popov; 159359345d6SNikita Popov %sext = sext i32 %x to i64 160359345d6SNikita Popov %zext = zext i32 %x to i64 161359345d6SNikita Popov %cmp = icmp sgt i64 %sext, %zext 162359345d6SNikita Popov ret i1 %cmp 163359345d6SNikita Popov} 164359345d6SNikita Popov 165359345d6SNikita Popovdefine i1 @sext_slt_zext(i32 %x) { 166359345d6SNikita Popov; CHECK-LABEL: @sext_slt_zext( 167359345d6SNikita Popov; CHECK-NEXT: [[SEXT:%.*]] = sext i32 [[X:%.*]] to i64 168359345d6SNikita Popov; CHECK-NEXT: [[ZEXT:%.*]] = zext i32 [[X]] to i64 169359345d6SNikita Popov; CHECK-NEXT: [[CMP:%.*]] = icmp slt i64 [[SEXT]], [[ZEXT]] 170359345d6SNikita Popov; CHECK-NEXT: ret i1 [[CMP]] 171359345d6SNikita Popov; 172359345d6SNikita Popov %sext = sext i32 %x to i64 173359345d6SNikita Popov %zext = zext i32 %x to i64 174359345d6SNikita Popov %cmp = icmp slt i64 %sext, %zext 175359345d6SNikita Popov ret i1 %cmp 176359345d6SNikita Popov} 177359345d6SNikita Popov 178359345d6SNikita Popovdefine i1 @sext_sle_zext(i32 %x) { 179359345d6SNikita Popov; CHECK-LABEL: @sext_sle_zext( 1803b671022SNikita Popov; CHECK-NEXT: ret i1 true 181359345d6SNikita Popov; 182359345d6SNikita Popov %sext = sext i32 %x to i64 183359345d6SNikita Popov %zext = zext i32 %x to i64 184359345d6SNikita Popov %cmp = icmp sle i64 %sext, %zext 185359345d6SNikita Popov ret i1 %cmp 186359345d6SNikita Popov} 18793ccb8ebSNikita Popov 18893ccb8ebSNikita Popovdefine <4 x i1> @zext_ugt_sext_vec(<4 x i32> %x) { 18993ccb8ebSNikita Popov; CHECK-LABEL: @zext_ugt_sext_vec( 1903b671022SNikita Popov; CHECK-NEXT: ret <4 x i1> zeroinitializer 19193ccb8ebSNikita Popov; 19293ccb8ebSNikita Popov %sext = sext <4 x i32> %x to <4 x i64> 19393ccb8ebSNikita Popov %zext = zext <4 x i32> %x to <4 x i64> 19493ccb8ebSNikita Popov %cmp = icmp ugt <4 x i64> %zext, %sext 19593ccb8ebSNikita Popov ret <4 x i1> %cmp 19693ccb8ebSNikita Popov} 19793ccb8ebSNikita Popov 19893ccb8ebSNikita Popovdefine <4 x i1> @sext_ult_zext_vec(<4 x i32> %x) { 19993ccb8ebSNikita Popov; CHECK-LABEL: @sext_ult_zext_vec( 2003b671022SNikita Popov; CHECK-NEXT: ret <4 x i1> zeroinitializer 20193ccb8ebSNikita Popov; 20293ccb8ebSNikita Popov %sext = sext <4 x i32> %x to <4 x i64> 20393ccb8ebSNikita Popov %zext = zext <4 x i32> %x to <4 x i64> 20493ccb8ebSNikita Popov %cmp = icmp ult <4 x i64> %sext, %zext 20593ccb8ebSNikita Popov ret <4 x i1> %cmp 20693ccb8ebSNikita Popov} 20793ccb8ebSNikita Popov 20893ccb8ebSNikita Popovdefine i1 @zext_ugt_sext_different_operand(i32 %x, i32 %y) { 20993ccb8ebSNikita Popov; CHECK-LABEL: @zext_ugt_sext_different_operand( 21093ccb8ebSNikita Popov; CHECK-NEXT: [[SEXT:%.*]] = sext i32 [[X:%.*]] to i64 21193ccb8ebSNikita Popov; CHECK-NEXT: [[ZEXT:%.*]] = zext i32 [[Y:%.*]] to i64 21293ccb8ebSNikita Popov; CHECK-NEXT: [[CMP:%.*]] = icmp ugt i64 [[ZEXT]], [[SEXT]] 21393ccb8ebSNikita Popov; CHECK-NEXT: ret i1 [[CMP]] 21493ccb8ebSNikita Popov; 21593ccb8ebSNikita Popov %sext = sext i32 %x to i64 21693ccb8ebSNikita Popov %zext = zext i32 %y to i64 21793ccb8ebSNikita Popov %cmp = icmp ugt i64 %zext, %sext 21893ccb8ebSNikita Popov ret i1 %cmp 21993ccb8ebSNikita Popov} 22093ccb8ebSNikita Popov 22193ccb8ebSNikita Popovdefine i1 @sext_ult_zext_different_operand(i32 %x, i32 %y) { 22293ccb8ebSNikita Popov; CHECK-LABEL: @sext_ult_zext_different_operand( 22393ccb8ebSNikita Popov; CHECK-NEXT: [[SEXT:%.*]] = sext i32 [[X:%.*]] to i64 22493ccb8ebSNikita Popov; CHECK-NEXT: [[ZEXT:%.*]] = zext i32 [[Y:%.*]] to i64 22593ccb8ebSNikita Popov; CHECK-NEXT: [[CMP:%.*]] = icmp ult i64 [[SEXT]], [[ZEXT]] 22693ccb8ebSNikita Popov; CHECK-NEXT: ret i1 [[CMP]] 22793ccb8ebSNikita Popov; 22893ccb8ebSNikita Popov %sext = sext i32 %x to i64 22993ccb8ebSNikita Popov %zext = zext i32 %y to i64 23093ccb8ebSNikita Popov %cmp = icmp ult i64 %sext, %zext 23193ccb8ebSNikita Popov ret i1 %cmp 23293ccb8ebSNikita Popov} 233