1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py 2; RUN: llc -verify-machineinstrs -mcpu pwr7 < %s | FileCheck %s 3target datalayout = "E-m:e-i64:64-n32:64" 4target triple = "powerpc64-unknown-linux-gnu" 5 6; Function Attrs: nounwind readnone 7define zeroext i16 @test16(i16 zeroext %x, i16 zeroext %y) #0 { 8; CHECK-LABEL: test16: 9; CHECK: # %bb.0: # %entry 10; CHECK-NEXT: cmpb 3, 4, 3 11; CHECK-NEXT: clrldi 3, 3, 48 12; CHECK-NEXT: blr 13entry: 14 %0 = xor i16 %y, %x 15 %1 = and i16 %0, 255 16 %cmp = icmp eq i16 %1, 0 17 %cmp20 = icmp ult i16 %0, 256 18 %conv25 = select i1 %cmp, i32 255, i32 0 19 %conv27 = select i1 %cmp20, i32 65280, i32 0 20 %or = or i32 %conv25, %conv27 21 %conv29 = trunc i32 %or to i16 22 ret i16 %conv29 23} 24 25define zeroext i16 @test16p1(i16 zeroext %x, i16 zeroext %y) #0 { 26; CHECK-LABEL: test16p1: 27; CHECK: # %bb.0: # %entry 28; CHECK-NEXT: cmpb 3, 4, 3 29; CHECK-NEXT: andi. 3, 3, 65285 30; CHECK-NEXT: blr 31entry: 32 %0 = xor i16 %y, %x 33 %1 = and i16 %0, 255 34 %cmp = icmp eq i16 %1, 0 35 %cmp20 = icmp ult i16 %0, 256 36 %conv28 = select i1 %cmp, i32 5, i32 0 37 %conv30 = select i1 %cmp20, i32 65280, i32 0 38 %or = or i32 %conv28, %conv30 39 %conv32 = trunc i32 %or to i16 40 ret i16 %conv32 41} 42 43; Function Attrs: nounwind readnone 44define zeroext i16 @test16p2(i16 zeroext %x, i16 zeroext %y) #0 { 45; CHECK-LABEL: test16p2: 46; CHECK: # %bb.0: # %entry 47; CHECK-NEXT: cmpb 3, 4, 3 48; CHECK-NEXT: andi. 3, 3, 1535 49; CHECK-NEXT: blr 50entry: 51 %0 = xor i16 %y, %x 52 %1 = and i16 %0, 255 53 %cmp = icmp eq i16 %1, 0 54 %cmp20 = icmp ult i16 %0, 256 55 %conv28 = select i1 %cmp, i32 255, i32 0 56 %conv30 = select i1 %cmp20, i32 1280, i32 0 57 %or = or i32 %conv28, %conv30 58 %conv32 = trunc i32 %or to i16 59 ret i16 %conv32 60} 61 62; Function Attrs: nounwind readnone 63define zeroext i16 @test16p3(i16 zeroext %x, i16 zeroext %y) #0 { 64; CHECK-LABEL: test16p3: 65; CHECK: # %bb.0: # %entry 66; CHECK-NEXT: cmpb 3, 4, 3 67; CHECK-NEXT: clrldi 3, 3, 55 68; CHECK-NEXT: xori 3, 3, 1280 69; CHECK-NEXT: blr 70entry: 71 %0 = xor i16 %y, %x 72 %1 = and i16 %0, 255 73 %cmp = icmp eq i16 %1, 0 74 %cmp20 = icmp ult i16 %0, 256 75 %conv27 = select i1 %cmp, i32 255, i32 0 76 %conv29 = select i1 %cmp20, i32 1024, i32 1280 77 %or = or i32 %conv27, %conv29 78 %conv31 = trunc i32 %or to i16 79 ret i16 %conv31 80} 81 82define zeroext i32 @test32(i32 zeroext %x, i32 zeroext %y) #0 { 83; CHECK-LABEL: test32: 84; CHECK: # %bb.0: # %entry 85; CHECK-NEXT: cmpb 3, 4, 3 86; CHECK-NEXT: clrldi 3, 3, 32 87; CHECK-NEXT: blr 88entry: 89 %0 = xor i32 %y, %x 90 %1 = and i32 %0, 255 91 %cmp = icmp eq i32 %1, 0 92 %2 = and i32 %0, 65280 93 %cmp28 = icmp eq i32 %2, 0 94 %3 = and i32 %0, 16711680 95 %cmp34 = icmp eq i32 %3, 0 96 %cmp40 = icmp ult i32 %0, 16777216 97 %conv44 = select i1 %cmp, i32 255, i32 0 98 %conv45 = select i1 %cmp28, i32 65280, i32 0 99 %conv47 = select i1 %cmp34, i32 16711680, i32 0 100 %conv50 = select i1 %cmp40, i32 -16777216, i32 0 101 %or = or i32 %conv45, %conv50 102 %or49 = or i32 %or, %conv44 103 %or52 = or i32 %or49, %conv47 104 ret i32 %or52 105} 106 107define zeroext i32 @test32p1(i32 zeroext %x, i32 zeroext %y) #0 { 108; CHECK-LABEL: test32p1: 109; CHECK: # %bb.0: # %entry 110; CHECK-NEXT: cmpb 3, 4, 3 111; CHECK-NEXT: rldicl 3, 3, 40, 5 112; CHECK-NEXT: rldicl 3, 3, 24, 32 113; CHECK-NEXT: blr 114entry: 115 %0 = xor i32 %y, %x 116 %1 = and i32 %0, 255 117 %cmp = icmp eq i32 %1, 0 118 %2 = and i32 %0, 65280 119 %cmp28 = icmp eq i32 %2, 0 120 %3 = and i32 %0, 16711680 121 %cmp34 = icmp eq i32 %3, 0 122 %cmp40 = icmp ult i32 %0, 16777216 123 %conv47 = select i1 %cmp, i32 255, i32 0 124 %conv48 = select i1 %cmp28, i32 65280, i32 0 125 %conv50 = select i1 %cmp34, i32 458752, i32 0 126 %conv53 = select i1 %cmp40, i32 -16777216, i32 0 127 %or = or i32 %conv48, %conv53 128 %or52 = or i32 %or, %conv47 129 %or55 = or i32 %or52, %conv50 130 ret i32 %or55 131} 132 133define zeroext i32 @test32p2(i32 zeroext %x, i32 zeroext %y) #0 { 134; CHECK-LABEL: test32p2: 135; CHECK: # %bb.0: # %entry 136; CHECK-NEXT: cmpb 3, 4, 3 137; CHECK-NEXT: rldicl 3, 3, 40, 8 138; CHECK-NEXT: rldicl 3, 3, 24, 32 139; CHECK-NEXT: blr 140entry: 141 %0 = xor i32 %y, %x 142 %1 = and i32 %0, 255 143 %cmp = icmp eq i32 %1, 0 144 %2 = and i32 %0, 65280 145 %cmp22 = icmp eq i32 %2, 0 146 %cmp28 = icmp ult i32 %0, 16777216 147 %conv32 = select i1 %cmp, i32 255, i32 0 148 %conv33 = select i1 %cmp22, i32 65280, i32 0 149 %conv35 = select i1 %cmp28, i32 -16777216, i32 0 150 %or = or i32 %conv33, %conv35 151 %or37 = or i32 %or, %conv32 152 ret i32 %or37 153} 154 155define i64 @test64(i64 %x, i64 %y) #0 { 156; CHECK-LABEL: test64: 157; CHECK: # %bb.0: # %entry 158; CHECK-NEXT: cmpb 3, 3, 4 159; CHECK-NEXT: blr 160entry: 161 %shr19 = lshr i64 %x, 56 162 %conv21 = trunc i64 %shr19 to i32 163 %shr43 = lshr i64 %y, 56 164 %conv45 = trunc i64 %shr43 to i32 165 %0 = xor i64 %y, %x 166 %1 = and i64 %0, 255 167 %cmp = icmp eq i64 %1, 0 168 %2 = and i64 %0, 65280 169 %cmp52 = icmp eq i64 %2, 0 170 %3 = and i64 %0, 16711680 171 %cmp58 = icmp eq i64 %3, 0 172 %4 = and i64 %0, 4278190080 173 %cmp64 = icmp eq i64 %4, 0 174 %5 = and i64 %0, 1095216660480 175 %cmp70 = icmp eq i64 %5, 0 176 %6 = and i64 %0, 280375465082880 177 %cmp76 = icmp eq i64 %6, 0 178 %7 = and i64 %0, 71776119061217280 179 %cmp82 = icmp eq i64 %7, 0 180 %cmp88 = icmp eq i32 %conv21, %conv45 181 %conv92 = select i1 %cmp, i64 255, i64 0 182 %conv93 = select i1 %cmp52, i64 65280, i64 0 183 %or = or i64 %conv92, %conv93 184 %conv95 = select i1 %cmp58, i64 16711680, i64 0 185 %or97 = or i64 %or, %conv95 186 %conv98 = select i1 %cmp64, i64 4278190080, i64 0 187 %or100 = or i64 %or97, %conv98 188 %conv101 = select i1 %cmp70, i64 1095216660480, i64 0 189 %or103 = or i64 %or100, %conv101 190 %conv104 = select i1 %cmp76, i64 280375465082880, i64 0 191 %or106 = or i64 %or103, %conv104 192 %conv107 = select i1 %cmp82, i64 71776119061217280, i64 0 193 %or109 = or i64 %or106, %conv107 194 %conv110 = select i1 %cmp88, i64 -72057594037927936, i64 0 195 %or112 = or i64 %or109, %conv110 196 ret i64 %or112 197} 198 199attributes #0 = { nounwind readnone } 200 201