brintos

brintos / llvm-project-archived public Read only

0
0
Text · 5.2 KiB · 9afe2a9 Raw
193 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_test_checks.py2; RUN: opt < %s -passes=instcombine -S | FileCheck %s3 4; Test all integer predicates with bool types and true/false constants,5; with not on LHS (icmp pred (xor X, true), true|false).6; Use vectors to provide test coverage that is not duplicated in other folds.7 8define <2 x i1> @eq_t_not(<2 x i1> %a) {9; CHECK-LABEL: @eq_t_not(10; CHECK-NEXT:    [[NOT:%.*]] = xor <2 x i1> [[A:%.*]], splat (i1 true)11; CHECK-NEXT:    ret <2 x i1> [[NOT]]12;13  %not = xor <2 x i1> %a, <i1 true, i1 true>14  %r = icmp eq <2 x i1> %not, <i1 true, i1 true>15  ret <2 x i1> %r16}17 18define <2 x i1> @eq_f_not(<2 x i1> %a) {19; CHECK-LABEL: @eq_f_not(20; CHECK-NEXT:    ret <2 x i1> [[A:%.*]]21;22  %not = xor <2 x i1> %a, <i1 true, i1 true>23  %r = icmp eq <2 x i1> %not, <i1 false, i1 false>24  ret <2 x i1> %r25}26 27define <2 x i1> @ne_t_not(<2 x i1> %a) {28; CHECK-LABEL: @ne_t_not(29; CHECK-NEXT:    ret <2 x i1> [[A:%.*]]30;31  %not = xor <2 x i1> %a, <i1 true, i1 true>32  %r = icmp ne <2 x i1> %not, <i1 true, i1 true>33  ret <2 x i1> %r34}35 36define <2 x i1> @ne_f_not(<2 x i1> %a) {37; CHECK-LABEL: @ne_f_not(38; CHECK-NEXT:    [[NOT:%.*]] = xor <2 x i1> [[A:%.*]], splat (i1 true)39; CHECK-NEXT:    ret <2 x i1> [[NOT]]40;41  %not = xor <2 x i1> %a, <i1 true, i1 true>42  %r = icmp ne <2 x i1> %not, <i1 false, i1 false>43  ret <2 x i1> %r44}45 46define <2 x i1> @ugt_t_not(<2 x i1> %a) {47; CHECK-LABEL: @ugt_t_not(48; CHECK-NEXT:    ret <2 x i1> zeroinitializer49;50  %not = xor <2 x i1> %a, <i1 true, i1 true>51  %r = icmp ugt <2 x i1> %not, <i1 true, i1 true>52  ret <2 x i1> %r53}54 55define <2 x i1> @ugt_f_not(<2 x i1> %a) {56; CHECK-LABEL: @ugt_f_not(57; CHECK-NEXT:    [[NOT:%.*]] = xor <2 x i1> [[A:%.*]], splat (i1 true)58; CHECK-NEXT:    ret <2 x i1> [[NOT]]59;60  %not = xor <2 x i1> %a, <i1 true, i1 true>61  %r = icmp ugt <2 x i1> %not, <i1 false, i1 false>62  ret <2 x i1> %r63}64 65define <2 x i1> @ult_t_not(<2 x i1> %a) {66; CHECK-LABEL: @ult_t_not(67; CHECK-NEXT:    ret <2 x i1> [[A:%.*]]68;69  %not = xor <2 x i1> %a, <i1 true, i1 true>70  %r = icmp ult <2 x i1> %not, <i1 true, i1 true>71  ret <2 x i1> %r72}73 74define <2 x i1> @ult_f_not(<2 x i1> %a) {75; CHECK-LABEL: @ult_f_not(76; CHECK-NEXT:    ret <2 x i1> zeroinitializer77;78  %not = xor <2 x i1> %a, <i1 true, i1 true>79  %r = icmp ult <2 x i1> %not, <i1 false, i1 false>80  ret <2 x i1> %r81}82 83define <2 x i1> @sgt_t_not(<2 x i1> %a) {84; CHECK-LABEL: @sgt_t_not(85; CHECK-NEXT:    ret <2 x i1> [[A:%.*]]86;87  %not = xor <2 x i1> %a, <i1 true, i1 true>88  %r = icmp sgt <2 x i1> %not, <i1 true, i1 true>89  ret <2 x i1> %r90}91 92define <2 x i1> @sgt_f_not(<2 x i1> %a) {93; CHECK-LABEL: @sgt_f_not(94; CHECK-NEXT:    ret <2 x i1> zeroinitializer95;96  %not = xor <2 x i1> %a, <i1 true, i1 true>97  %r = icmp sgt <2 x i1> %not, <i1 false, i1 false>98  ret <2 x i1> %r99}100 101define <2 x i1> @slt_t_not(<2 x i1> %a) {102; CHECK-LABEL: @slt_t_not(103; CHECK-NEXT:    ret <2 x i1> zeroinitializer104;105  %not = xor <2 x i1> %a, <i1 true, i1 true>106  %r = icmp slt <2 x i1> %not, <i1 true, i1 true>107  ret <2 x i1> %r108}109 110define <2 x i1> @slt_f_not(<2 x i1> %a) {111; CHECK-LABEL: @slt_f_not(112; CHECK-NEXT:    [[NOT:%.*]] = xor <2 x i1> [[A:%.*]], splat (i1 true)113; CHECK-NEXT:    ret <2 x i1> [[NOT]]114;115  %not = xor <2 x i1> %a, <i1 true, i1 true>116  %r = icmp slt <2 x i1> %not, <i1 false, i1 false>117  ret <2 x i1> %r118}119 120define <2 x i1> @uge_t_not(<2 x i1> %a) {121; CHECK-LABEL: @uge_t_not(122; CHECK-NEXT:    [[NOT:%.*]] = xor <2 x i1> [[A:%.*]], splat (i1 true)123; CHECK-NEXT:    ret <2 x i1> [[NOT]]124;125  %not = xor <2 x i1> %a, <i1 true, i1 true>126  %r = icmp uge <2 x i1> %not, <i1 true, i1 true>127  ret <2 x i1> %r128}129 130define <2 x i1> @uge_f_not(<2 x i1> %a) {131; CHECK-LABEL: @uge_f_not(132; CHECK-NEXT:    ret <2 x i1> splat (i1 true)133;134  %not = xor <2 x i1> %a, <i1 true, i1 true>135  %r = icmp uge <2 x i1> %not, <i1 false, i1 false>136  ret <2 x i1> %r137}138 139define <2 x i1> @ule_t_not(<2 x i1> %a) {140; CHECK-LABEL: @ule_t_not(141; CHECK-NEXT:    ret <2 x i1> splat (i1 true)142;143  %not = xor <2 x i1> %a, <i1 true, i1 true>144  %r = icmp ule <2 x i1> %not, <i1 true, i1 true>145  ret <2 x i1> %r146}147 148define <2 x i1> @ule_f_not(<2 x i1> %a) {149; CHECK-LABEL: @ule_f_not(150; CHECK-NEXT:    ret <2 x i1> [[A:%.*]]151;152  %not = xor <2 x i1> %a, <i1 true, i1 true>153  %r = icmp ule <2 x i1> %not, <i1 false, i1 false>154  ret <2 x i1> %r155}156 157define <2 x i1> @sge_t_not(<2 x i1> %a) {158; CHECK-LABEL: @sge_t_not(159; CHECK-NEXT:    ret <2 x i1> splat (i1 true)160;161  %not = xor <2 x i1> %a, <i1 true, i1 true>162  %r = icmp sge <2 x i1> %not, <i1 true, i1 true>163  ret <2 x i1> %r164}165 166define <2 x i1> @sge_f_not(<2 x i1> %a) {167; CHECK-LABEL: @sge_f_not(168; CHECK-NEXT:    ret <2 x i1> [[A:%.*]]169;170  %not = xor <2 x i1> %a, <i1 true, i1 true>171  %r = icmp sge <2 x i1> %not, <i1 false, i1 false>172  ret <2 x i1> %r173}174 175define <2 x i1> @sle_t_not(<2 x i1> %a) {176; CHECK-LABEL: @sle_t_not(177; CHECK-NEXT:    [[NOT:%.*]] = xor <2 x i1> [[A:%.*]], splat (i1 true)178; CHECK-NEXT:    ret <2 x i1> [[NOT]]179;180  %not = xor <2 x i1> %a, <i1 true, i1 true>181  %r = icmp sle <2 x i1> %not, <i1 true, i1 true>182  ret <2 x i1> %r183}184 185define <2 x i1> @sle_f_not(<2 x i1> %a) {186; CHECK-LABEL: @sle_f_not(187; CHECK-NEXT:    ret <2 x i1> splat (i1 true)188;189  %not = xor <2 x i1> %a, <i1 true, i1 true>190  %r = icmp sle <2 x i1> %not, <i1 false, i1 false>191  ret <2 x i1> %r192}193