1012f01e2SJuneyoung Lee; NOTE: Assertions have been autogenerated by utils/update_test_checks.py 2*acdc419cSBjorn Pettersson; RUN: opt < %s -passes=instcombine -S | FileCheck %s 3012f01e2SJuneyoung Lee 4012f01e2SJuneyoung Leedefine i1 @a_true_implies_b_true(i8 %z, i1 %X, i1 %Y) { 5012f01e2SJuneyoung Lee; CHECK-LABEL: @a_true_implies_b_true( 6012f01e2SJuneyoung Lee; CHECK-NEXT: [[A:%.*]] = icmp ugt i8 [[Z:%.*]], 20 724ce194cSJuneyoung Lee; CHECK-NEXT: [[RES:%.*]] = select i1 [[A]], i1 [[X:%.*]], i1 false 8012f01e2SJuneyoung Lee; CHECK-NEXT: ret i1 [[RES]] 9012f01e2SJuneyoung Lee; 10012f01e2SJuneyoung Lee %a = icmp ugt i8 %z, 20 11012f01e2SJuneyoung Lee %b = icmp ugt i8 %z, 10 12012f01e2SJuneyoung Lee %sel = select i1 %b, i1 %X, i1 %Y 13012f01e2SJuneyoung Lee %res = select i1 %a, i1 %sel, i1 false 14012f01e2SJuneyoung Lee ret i1 %res 15012f01e2SJuneyoung Lee} 16012f01e2SJuneyoung Lee 17012f01e2SJuneyoung Leedefine <2 x i1> @a_true_implies_b_true_vec(i8 %z0, <2 x i1> %X, <2 x i1> %Y) { 18012f01e2SJuneyoung Lee; CHECK-LABEL: @a_true_implies_b_true_vec( 19e6ad9ef4SPhilip Reames; CHECK-NEXT: [[A0:%.*]] = insertelement <2 x i8> poison, i8 [[Z0:%.*]], i64 0 20012f01e2SJuneyoung Lee; CHECK-NEXT: [[Z:%.*]] = shufflevector <2 x i8> [[A0]], <2 x i8> poison, <2 x i32> zeroinitializer 21012f01e2SJuneyoung Lee; CHECK-NEXT: [[A:%.*]] = icmp ugt <2 x i8> [[Z]], <i8 20, i8 19> 22012f01e2SJuneyoung Lee; CHECK-NEXT: [[B:%.*]] = icmp ugt i8 [[Z0]], 10 23012f01e2SJuneyoung Lee; CHECK-NEXT: [[SEL:%.*]] = select i1 [[B]], <2 x i1> [[X:%.*]], <2 x i1> [[Y:%.*]] 24012f01e2SJuneyoung Lee; CHECK-NEXT: [[RES:%.*]] = select <2 x i1> [[A]], <2 x i1> [[SEL]], <2 x i1> zeroinitializer 25012f01e2SJuneyoung Lee; CHECK-NEXT: ret <2 x i1> [[RES]] 26012f01e2SJuneyoung Lee; 27012f01e2SJuneyoung Lee 28012f01e2SJuneyoung Lee %a0 = insertelement <2 x i8> poison, i8 %z0, i8 0 29012f01e2SJuneyoung Lee %z = shufflevector <2 x i8> %a0, <2 x i8> poison, <2 x i32> zeroinitializer 30012f01e2SJuneyoung Lee %a = icmp ugt <2 x i8> %z, <i8 20, i8 19> 31012f01e2SJuneyoung Lee %b = icmp ugt i8 %z0, 10 32012f01e2SJuneyoung Lee %sel = select i1 %b, <2 x i1> %X, <2 x i1> %Y 33012f01e2SJuneyoung Lee %res = select <2 x i1> %a, <2 x i1> %sel, <2 x i1> zeroinitializer 34012f01e2SJuneyoung Lee ret <2 x i1> %res 35012f01e2SJuneyoung Lee} 36012f01e2SJuneyoung Lee 37012f01e2SJuneyoung Leedefine i1 @a_true_implies_b_true2(i8 %z, i1 %X, i1 %Y) { 38012f01e2SJuneyoung Lee; CHECK-LABEL: @a_true_implies_b_true2( 39012f01e2SJuneyoung Lee; CHECK-NEXT: [[A:%.*]] = icmp ugt i8 [[Z:%.*]], 20 4024ce194cSJuneyoung Lee; CHECK-NEXT: [[RES:%.*]] = select i1 [[A]], i1 [[X:%.*]], i1 false 41012f01e2SJuneyoung Lee; CHECK-NEXT: ret i1 [[RES]] 42012f01e2SJuneyoung Lee; 43012f01e2SJuneyoung Lee %a = icmp ugt i8 %z, 20 44012f01e2SJuneyoung Lee %b = icmp ugt i8 %z, 10 45012f01e2SJuneyoung Lee %sel = select i1 %b, i1 %X, i1 %Y 46012f01e2SJuneyoung Lee %res = and i1 %a, %sel 47012f01e2SJuneyoung Lee ret i1 %res 48012f01e2SJuneyoung Lee} 49012f01e2SJuneyoung Lee 50012f01e2SJuneyoung Leedefine i1 @a_true_implies_b_true2_comm(i8 %z, i1 %X, i1 %Y) { 51012f01e2SJuneyoung Lee; CHECK-LABEL: @a_true_implies_b_true2_comm( 52012f01e2SJuneyoung Lee; CHECK-NEXT: [[A:%.*]] = icmp ugt i8 [[Z:%.*]], 20 5324ce194cSJuneyoung Lee; CHECK-NEXT: [[RES:%.*]] = select i1 [[A]], i1 [[X:%.*]], i1 false 54012f01e2SJuneyoung Lee; CHECK-NEXT: ret i1 [[RES]] 55012f01e2SJuneyoung Lee; 56012f01e2SJuneyoung Lee %a = icmp ugt i8 %z, 20 57012f01e2SJuneyoung Lee %b = icmp ugt i8 %z, 10 58012f01e2SJuneyoung Lee %sel = select i1 %b, i1 %X, i1 %Y 59012f01e2SJuneyoung Lee %res = and i1 %sel, %a 60012f01e2SJuneyoung Lee ret i1 %res 61012f01e2SJuneyoung Lee} 62012f01e2SJuneyoung Lee 63012f01e2SJuneyoung Leedefine i1 @a_true_implies_b_false(i8 %z, i1 %X, i1 %Y) { 64012f01e2SJuneyoung Lee; CHECK-LABEL: @a_true_implies_b_false( 65012f01e2SJuneyoung Lee; CHECK-NEXT: [[A:%.*]] = icmp ugt i8 [[Z:%.*]], 20 6624ce194cSJuneyoung Lee; CHECK-NEXT: [[RES:%.*]] = select i1 [[A]], i1 [[Y:%.*]], i1 false 67012f01e2SJuneyoung Lee; CHECK-NEXT: ret i1 [[RES]] 68012f01e2SJuneyoung Lee; 69012f01e2SJuneyoung Lee %a = icmp ugt i8 %z, 20 70012f01e2SJuneyoung Lee %b = icmp ult i8 %z, 10 71012f01e2SJuneyoung Lee %sel = select i1 %b, i1 %X, i1 %Y 72012f01e2SJuneyoung Lee %res = select i1 %a, i1 %sel, i1 false 73012f01e2SJuneyoung Lee ret i1 %res 74012f01e2SJuneyoung Lee} 75012f01e2SJuneyoung Lee 76012f01e2SJuneyoung Leedefine i1 @a_true_implies_b_false2(i8 %z, i1 %X, i1 %Y) { 77012f01e2SJuneyoung Lee; CHECK-LABEL: @a_true_implies_b_false2( 78012f01e2SJuneyoung Lee; CHECK-NEXT: [[A:%.*]] = icmp ugt i8 [[Z:%.*]], 20 7924ce194cSJuneyoung Lee; CHECK-NEXT: [[RES:%.*]] = select i1 [[A]], i1 [[Y:%.*]], i1 false 80012f01e2SJuneyoung Lee; CHECK-NEXT: ret i1 [[RES]] 81012f01e2SJuneyoung Lee; 82012f01e2SJuneyoung Lee %a = icmp ugt i8 %z, 20 83012f01e2SJuneyoung Lee %b = icmp eq i8 %z, 10 84012f01e2SJuneyoung Lee %sel = select i1 %b, i1 %X, i1 %Y 85012f01e2SJuneyoung Lee %res = and i1 %a, %sel 86012f01e2SJuneyoung Lee ret i1 %res 87012f01e2SJuneyoung Lee} 88012f01e2SJuneyoung Lee 89012f01e2SJuneyoung Leedefine i1 @a_true_implies_b_false2_comm(i8 %z, i1 %X, i1 %Y) { 90012f01e2SJuneyoung Lee; CHECK-LABEL: @a_true_implies_b_false2_comm( 91012f01e2SJuneyoung Lee; CHECK-NEXT: [[A:%.*]] = icmp ugt i8 [[Z:%.*]], 20 9224ce194cSJuneyoung Lee; CHECK-NEXT: [[RES:%.*]] = select i1 [[A]], i1 [[Y:%.*]], i1 false 93012f01e2SJuneyoung Lee; CHECK-NEXT: ret i1 [[RES]] 94012f01e2SJuneyoung Lee; 95012f01e2SJuneyoung Lee %a = icmp ugt i8 %z, 20 96012f01e2SJuneyoung Lee %b = icmp eq i8 %z, 10 97012f01e2SJuneyoung Lee %sel = select i1 %b, i1 %X, i1 %Y 98012f01e2SJuneyoung Lee %res = and i1 %sel, %a 99012f01e2SJuneyoung Lee ret i1 %res 100012f01e2SJuneyoung Lee} 101012f01e2SJuneyoung Lee 102012f01e2SJuneyoung Leedefine i1 @a_false_implies_b_true(i8 %z, i1 %X, i1 %Y) { 103012f01e2SJuneyoung Lee; CHECK-LABEL: @a_false_implies_b_true( 104012f01e2SJuneyoung Lee; CHECK-NEXT: [[A:%.*]] = icmp ugt i8 [[Z:%.*]], 10 10524ce194cSJuneyoung Lee; CHECK-NEXT: [[RES:%.*]] = select i1 [[A]], i1 true, i1 [[X:%.*]] 106012f01e2SJuneyoung Lee; CHECK-NEXT: ret i1 [[RES]] 107012f01e2SJuneyoung Lee; 108012f01e2SJuneyoung Lee %a = icmp ugt i8 %z, 10 109012f01e2SJuneyoung Lee %b = icmp ult i8 %z, 20 110012f01e2SJuneyoung Lee %sel = select i1 %b, i1 %X, i1 %Y 111012f01e2SJuneyoung Lee %res = select i1 %a, i1 true, i1 %sel 112012f01e2SJuneyoung Lee ret i1 %res 113012f01e2SJuneyoung Lee} 114012f01e2SJuneyoung Lee 115012f01e2SJuneyoung Leedefine i1 @a_false_implies_b_true2(i8 %z, i1 %X, i1 %Y) { 116012f01e2SJuneyoung Lee; CHECK-LABEL: @a_false_implies_b_true2( 117012f01e2SJuneyoung Lee; CHECK-NEXT: [[A:%.*]] = icmp ugt i8 [[Z:%.*]], 10 11824ce194cSJuneyoung Lee; CHECK-NEXT: [[RES:%.*]] = select i1 [[A]], i1 true, i1 [[X:%.*]] 119012f01e2SJuneyoung Lee; CHECK-NEXT: ret i1 [[RES]] 120012f01e2SJuneyoung Lee; 121012f01e2SJuneyoung Lee %a = icmp ugt i8 %z, 10 122012f01e2SJuneyoung Lee %b = icmp ult i8 %z, 20 123012f01e2SJuneyoung Lee %sel = select i1 %b, i1 %X, i1 %Y 124012f01e2SJuneyoung Lee %res = or i1 %a, %sel 125012f01e2SJuneyoung Lee ret i1 %res 126012f01e2SJuneyoung Lee} 127012f01e2SJuneyoung Lee 128012f01e2SJuneyoung Leedefine i1 @a_false_implies_b_true2_comm(i8 %z, i1 %X, i1 %Y) { 129012f01e2SJuneyoung Lee; CHECK-LABEL: @a_false_implies_b_true2_comm( 130012f01e2SJuneyoung Lee; CHECK-NEXT: [[A:%.*]] = icmp ugt i8 [[Z:%.*]], 10 13124ce194cSJuneyoung Lee; CHECK-NEXT: [[RES:%.*]] = select i1 [[A]], i1 true, i1 [[X:%.*]] 132012f01e2SJuneyoung Lee; CHECK-NEXT: ret i1 [[RES]] 133012f01e2SJuneyoung Lee; 134012f01e2SJuneyoung Lee %a = icmp ugt i8 %z, 10 135012f01e2SJuneyoung Lee %b = icmp ult i8 %z, 20 136012f01e2SJuneyoung Lee %sel = select i1 %b, i1 %X, i1 %Y 137012f01e2SJuneyoung Lee %res = or i1 %sel, %a 138012f01e2SJuneyoung Lee ret i1 %res 139012f01e2SJuneyoung Lee} 140012f01e2SJuneyoung Lee 141012f01e2SJuneyoung Leedefine i1 @a_false_implies_b_false(i8 %z, i1 %X, i1 %Y) { 142012f01e2SJuneyoung Lee; CHECK-LABEL: @a_false_implies_b_false( 143012f01e2SJuneyoung Lee; CHECK-NEXT: [[A:%.*]] = icmp ugt i8 [[Z:%.*]], 10 14424ce194cSJuneyoung Lee; CHECK-NEXT: [[RES:%.*]] = select i1 [[A]], i1 true, i1 [[Y:%.*]] 145012f01e2SJuneyoung Lee; CHECK-NEXT: ret i1 [[RES]] 146012f01e2SJuneyoung Lee; 147012f01e2SJuneyoung Lee %a = icmp ugt i8 %z, 10 148012f01e2SJuneyoung Lee %b = icmp ugt i8 %z, 20 149012f01e2SJuneyoung Lee %sel = select i1 %b, i1 %X, i1 %Y 150012f01e2SJuneyoung Lee %res = select i1 %a, i1 true, i1 %sel 151012f01e2SJuneyoung Lee ret i1 %res 152012f01e2SJuneyoung Lee} 153012f01e2SJuneyoung Lee 154012f01e2SJuneyoung Leedefine i1 @a_false_implies_b_false2(i8 %z, i1 %X, i1 %Y) { 155012f01e2SJuneyoung Lee; CHECK-LABEL: @a_false_implies_b_false2( 156012f01e2SJuneyoung Lee; CHECK-NEXT: [[A:%.*]] = icmp ugt i8 [[Z:%.*]], 10 15724ce194cSJuneyoung Lee; CHECK-NEXT: [[RES:%.*]] = select i1 [[A]], i1 true, i1 [[Y:%.*]] 158012f01e2SJuneyoung Lee; CHECK-NEXT: ret i1 [[RES]] 159012f01e2SJuneyoung Lee; 160012f01e2SJuneyoung Lee %a = icmp ugt i8 %z, 10 161012f01e2SJuneyoung Lee %b = icmp ugt i8 %z, 20 162012f01e2SJuneyoung Lee %sel = select i1 %b, i1 %X, i1 %Y 163012f01e2SJuneyoung Lee %res = or i1 %a, %sel 164012f01e2SJuneyoung Lee ret i1 %res 165012f01e2SJuneyoung Lee} 166012f01e2SJuneyoung Lee 167012f01e2SJuneyoung Leedefine i1 @a_false_implies_b_false2_comm(i8 %z, i1 %X, i1 %Y) { 168012f01e2SJuneyoung Lee; CHECK-LABEL: @a_false_implies_b_false2_comm( 169012f01e2SJuneyoung Lee; CHECK-NEXT: [[A:%.*]] = icmp ugt i8 [[Z:%.*]], 10 17024ce194cSJuneyoung Lee; CHECK-NEXT: [[RES:%.*]] = select i1 [[A]], i1 true, i1 [[Y:%.*]] 171012f01e2SJuneyoung Lee; CHECK-NEXT: ret i1 [[RES]] 172012f01e2SJuneyoung Lee; 173012f01e2SJuneyoung Lee %a = icmp ugt i8 %z, 10 174012f01e2SJuneyoung Lee %b = icmp ugt i8 %z, 20 175012f01e2SJuneyoung Lee %sel = select i1 %b, i1 %X, i1 %Y 176012f01e2SJuneyoung Lee %res = or i1 %sel, %a 177012f01e2SJuneyoung Lee ret i1 %res 178012f01e2SJuneyoung Lee} 179