1*9880d681SAndroid Build Coastguard Worker; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py 2*9880d681SAndroid Build Coastguard Worker; RUN: llc < %s -mtriple=i686-unknown -mattr=+sse4.2 | FileCheck %s --check-prefix=X32-SSE --check-prefix=X32-SSE42 3*9880d681SAndroid Build Coastguard Worker; RUN: llc < %s -mtriple=x86_64-unknown -mattr=+sse4.2 | FileCheck %s --check-prefix=X64-SSE --check-prefix=X64-SSE42 4*9880d681SAndroid Build Coastguard Worker 5*9880d681SAndroid Build Coastguard Worker; 6*9880d681SAndroid Build Coastguard Worker; AND/XOR/OR i32 as v4i8 7*9880d681SAndroid Build Coastguard Worker; 8*9880d681SAndroid Build Coastguard Worker 9*9880d681SAndroid Build Coastguard Workerdefine i32 @and_i32_as_v4i8(i32 %a, i32 %b) nounwind { 10*9880d681SAndroid Build Coastguard Worker; X32-SSE-LABEL: and_i32_as_v4i8: 11*9880d681SAndroid Build Coastguard Worker; X32-SSE: # BB#0: 12*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT: movl {{[0-9]+}}(%esp), %eax 13*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT: andl {{[0-9]+}}(%esp), %eax 14*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT: retl 15*9880d681SAndroid Build Coastguard Worker; 16*9880d681SAndroid Build Coastguard Worker; X64-SSE-LABEL: and_i32_as_v4i8: 17*9880d681SAndroid Build Coastguard Worker; X64-SSE: # BB#0: 18*9880d681SAndroid Build Coastguard Worker; X64-SSE-NEXT: andl %esi, %edi 19*9880d681SAndroid Build Coastguard Worker; X64-SSE-NEXT: movl %edi, %eax 20*9880d681SAndroid Build Coastguard Worker; X64-SSE-NEXT: retq 21*9880d681SAndroid Build Coastguard Worker %1 = bitcast i32 %a to <4 x i8> 22*9880d681SAndroid Build Coastguard Worker %2 = bitcast i32 %b to <4 x i8> 23*9880d681SAndroid Build Coastguard Worker %3 = and <4 x i8> %1, %2 24*9880d681SAndroid Build Coastguard Worker %4 = bitcast <4 x i8> %3 to i32 25*9880d681SAndroid Build Coastguard Worker ret i32 %4 26*9880d681SAndroid Build Coastguard Worker} 27*9880d681SAndroid Build Coastguard Worker 28*9880d681SAndroid Build Coastguard Workerdefine i32 @xor_i32_as_v4i8(i32 %a, i32 %b) nounwind { 29*9880d681SAndroid Build Coastguard Worker; X32-SSE-LABEL: xor_i32_as_v4i8: 30*9880d681SAndroid Build Coastguard Worker; X32-SSE: # BB#0: 31*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT: movl {{[0-9]+}}(%esp), %eax 32*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT: xorl {{[0-9]+}}(%esp), %eax 33*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT: retl 34*9880d681SAndroid Build Coastguard Worker; 35*9880d681SAndroid Build Coastguard Worker; X64-SSE-LABEL: xor_i32_as_v4i8: 36*9880d681SAndroid Build Coastguard Worker; X64-SSE: # BB#0: 37*9880d681SAndroid Build Coastguard Worker; X64-SSE-NEXT: xorl %esi, %edi 38*9880d681SAndroid Build Coastguard Worker; X64-SSE-NEXT: movl %edi, %eax 39*9880d681SAndroid Build Coastguard Worker; X64-SSE-NEXT: retq 40*9880d681SAndroid Build Coastguard Worker %1 = bitcast i32 %a to <4 x i8> 41*9880d681SAndroid Build Coastguard Worker %2 = bitcast i32 %b to <4 x i8> 42*9880d681SAndroid Build Coastguard Worker %3 = xor <4 x i8> %1, %2 43*9880d681SAndroid Build Coastguard Worker %4 = bitcast <4 x i8> %3 to i32 44*9880d681SAndroid Build Coastguard Worker ret i32 %4 45*9880d681SAndroid Build Coastguard Worker} 46*9880d681SAndroid Build Coastguard Worker 47*9880d681SAndroid Build Coastguard Workerdefine i32 @or_i32_as_v4i8(i32 %a, i32 %b) nounwind { 48*9880d681SAndroid Build Coastguard Worker; X32-SSE-LABEL: or_i32_as_v4i8: 49*9880d681SAndroid Build Coastguard Worker; X32-SSE: # BB#0: 50*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT: movl {{[0-9]+}}(%esp), %eax 51*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT: orl {{[0-9]+}}(%esp), %eax 52*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT: retl 53*9880d681SAndroid Build Coastguard Worker; 54*9880d681SAndroid Build Coastguard Worker; X64-SSE-LABEL: or_i32_as_v4i8: 55*9880d681SAndroid Build Coastguard Worker; X64-SSE: # BB#0: 56*9880d681SAndroid Build Coastguard Worker; X64-SSE-NEXT: orl %esi, %edi 57*9880d681SAndroid Build Coastguard Worker; X64-SSE-NEXT: movl %edi, %eax 58*9880d681SAndroid Build Coastguard Worker; X64-SSE-NEXT: retq 59*9880d681SAndroid Build Coastguard Worker %1 = bitcast i32 %a to <4 x i8> 60*9880d681SAndroid Build Coastguard Worker %2 = bitcast i32 %b to <4 x i8> 61*9880d681SAndroid Build Coastguard Worker %3 = or <4 x i8> %1, %2 62*9880d681SAndroid Build Coastguard Worker %4 = bitcast <4 x i8> %3 to i32 63*9880d681SAndroid Build Coastguard Worker ret i32 %4 64*9880d681SAndroid Build Coastguard Worker} 65*9880d681SAndroid Build Coastguard Worker 66*9880d681SAndroid Build Coastguard Worker; 67*9880d681SAndroid Build Coastguard Worker; AND/XOR/OR i32 as v8i4 68*9880d681SAndroid Build Coastguard Worker; 69*9880d681SAndroid Build Coastguard Worker 70*9880d681SAndroid Build Coastguard Workerdefine i32 @and_i32_as_v8i4(i32 %a, i32 %b) nounwind { 71*9880d681SAndroid Build Coastguard Worker; X32-SSE-LABEL: and_i32_as_v8i4: 72*9880d681SAndroid Build Coastguard Worker; X32-SSE: # BB#0: 73*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT: movl {{[0-9]+}}(%esp), %eax 74*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT: andl {{[0-9]+}}(%esp), %eax 75*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT: retl 76*9880d681SAndroid Build Coastguard Worker; 77*9880d681SAndroid Build Coastguard Worker; X64-SSE-LABEL: and_i32_as_v8i4: 78*9880d681SAndroid Build Coastguard Worker; X64-SSE: # BB#0: 79*9880d681SAndroid Build Coastguard Worker; X64-SSE-NEXT: andl %esi, %edi 80*9880d681SAndroid Build Coastguard Worker; X64-SSE-NEXT: movl %edi, %eax 81*9880d681SAndroid Build Coastguard Worker; X64-SSE-NEXT: retq 82*9880d681SAndroid Build Coastguard Worker %1 = bitcast i32 %a to <8 x i4> 83*9880d681SAndroid Build Coastguard Worker %2 = bitcast i32 %b to <8 x i4> 84*9880d681SAndroid Build Coastguard Worker %3 = and <8 x i4> %1, %2 85*9880d681SAndroid Build Coastguard Worker %4 = bitcast <8 x i4> %3 to i32 86*9880d681SAndroid Build Coastguard Worker ret i32 %4 87*9880d681SAndroid Build Coastguard Worker} 88*9880d681SAndroid Build Coastguard Worker 89*9880d681SAndroid Build Coastguard Workerdefine i32 @xor_i32_as_v8i4(i32 %a, i32 %b) nounwind { 90*9880d681SAndroid Build Coastguard Worker; X32-SSE-LABEL: xor_i32_as_v8i4: 91*9880d681SAndroid Build Coastguard Worker; X32-SSE: # BB#0: 92*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT: movl {{[0-9]+}}(%esp), %eax 93*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT: xorl {{[0-9]+}}(%esp), %eax 94*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT: retl 95*9880d681SAndroid Build Coastguard Worker; 96*9880d681SAndroid Build Coastguard Worker; X64-SSE-LABEL: xor_i32_as_v8i4: 97*9880d681SAndroid Build Coastguard Worker; X64-SSE: # BB#0: 98*9880d681SAndroid Build Coastguard Worker; X64-SSE-NEXT: xorl %esi, %edi 99*9880d681SAndroid Build Coastguard Worker; X64-SSE-NEXT: movl %edi, %eax 100*9880d681SAndroid Build Coastguard Worker; X64-SSE-NEXT: retq 101*9880d681SAndroid Build Coastguard Worker %1 = bitcast i32 %a to <8 x i4> 102*9880d681SAndroid Build Coastguard Worker %2 = bitcast i32 %b to <8 x i4> 103*9880d681SAndroid Build Coastguard Worker %3 = xor <8 x i4> %1, %2 104*9880d681SAndroid Build Coastguard Worker %4 = bitcast <8 x i4> %3 to i32 105*9880d681SAndroid Build Coastguard Worker ret i32 %4 106*9880d681SAndroid Build Coastguard Worker} 107*9880d681SAndroid Build Coastguard Worker 108*9880d681SAndroid Build Coastguard Workerdefine i32 @or_i32_as_v8i4(i32 %a, i32 %b) nounwind { 109*9880d681SAndroid Build Coastguard Worker; X32-SSE-LABEL: or_i32_as_v8i4: 110*9880d681SAndroid Build Coastguard Worker; X32-SSE: # BB#0: 111*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT: movl {{[0-9]+}}(%esp), %eax 112*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT: orl {{[0-9]+}}(%esp), %eax 113*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT: retl 114*9880d681SAndroid Build Coastguard Worker; 115*9880d681SAndroid Build Coastguard Worker; X64-SSE-LABEL: or_i32_as_v8i4: 116*9880d681SAndroid Build Coastguard Worker; X64-SSE: # BB#0: 117*9880d681SAndroid Build Coastguard Worker; X64-SSE-NEXT: orl %esi, %edi 118*9880d681SAndroid Build Coastguard Worker; X64-SSE-NEXT: movl %edi, %eax 119*9880d681SAndroid Build Coastguard Worker; X64-SSE-NEXT: retq 120*9880d681SAndroid Build Coastguard Worker %1 = bitcast i32 %a to <8 x i4> 121*9880d681SAndroid Build Coastguard Worker %2 = bitcast i32 %b to <8 x i4> 122*9880d681SAndroid Build Coastguard Worker %3 = or <8 x i4> %1, %2 123*9880d681SAndroid Build Coastguard Worker %4 = bitcast <8 x i4> %3 to i32 124*9880d681SAndroid Build Coastguard Worker ret i32 %4 125*9880d681SAndroid Build Coastguard Worker} 126*9880d681SAndroid Build Coastguard Worker 127*9880d681SAndroid Build Coastguard Worker; 128*9880d681SAndroid Build Coastguard Worker; AND/XOR/OR v4i8 as i32 129*9880d681SAndroid Build Coastguard Worker; 130*9880d681SAndroid Build Coastguard Worker 131*9880d681SAndroid Build Coastguard Workerdefine <4 x i8> @and_v4i8_as_i32(<4 x i8> %a, <4 x i8> %b) nounwind { 132*9880d681SAndroid Build Coastguard Worker; X32-SSE-LABEL: and_v4i8_as_i32: 133*9880d681SAndroid Build Coastguard Worker; X32-SSE: # BB#0: 134*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT: andps %xmm1, %xmm0 135*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT: retl 136*9880d681SAndroid Build Coastguard Worker; 137*9880d681SAndroid Build Coastguard Worker; X64-SSE-LABEL: and_v4i8_as_i32: 138*9880d681SAndroid Build Coastguard Worker; X64-SSE: # BB#0: 139*9880d681SAndroid Build Coastguard Worker; X64-SSE-NEXT: andps %xmm1, %xmm0 140*9880d681SAndroid Build Coastguard Worker; X64-SSE-NEXT: retq 141*9880d681SAndroid Build Coastguard Worker %1 = bitcast <4 x i8> %a to i32 142*9880d681SAndroid Build Coastguard Worker %2 = bitcast <4 x i8> %b to i32 143*9880d681SAndroid Build Coastguard Worker %3 = and i32 %1, %2 144*9880d681SAndroid Build Coastguard Worker %4 = bitcast i32 %3 to <4 x i8> 145*9880d681SAndroid Build Coastguard Worker ret <4 x i8> %4 146*9880d681SAndroid Build Coastguard Worker} 147*9880d681SAndroid Build Coastguard Worker 148*9880d681SAndroid Build Coastguard Workerdefine <4 x i8> @xor_v4i8_as_i32(<4 x i8> %a, <4 x i8> %b) nounwind { 149*9880d681SAndroid Build Coastguard Worker; X32-SSE-LABEL: xor_v4i8_as_i32: 150*9880d681SAndroid Build Coastguard Worker; X32-SSE: # BB#0: 151*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT: xorps %xmm1, %xmm0 152*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT: retl 153*9880d681SAndroid Build Coastguard Worker; 154*9880d681SAndroid Build Coastguard Worker; X64-SSE-LABEL: xor_v4i8_as_i32: 155*9880d681SAndroid Build Coastguard Worker; X64-SSE: # BB#0: 156*9880d681SAndroid Build Coastguard Worker; X64-SSE-NEXT: xorps %xmm1, %xmm0 157*9880d681SAndroid Build Coastguard Worker; X64-SSE-NEXT: retq 158*9880d681SAndroid Build Coastguard Worker %1 = bitcast <4 x i8> %a to i32 159*9880d681SAndroid Build Coastguard Worker %2 = bitcast <4 x i8> %b to i32 160*9880d681SAndroid Build Coastguard Worker %3 = xor i32 %1, %2 161*9880d681SAndroid Build Coastguard Worker %4 = bitcast i32 %3 to <4 x i8> 162*9880d681SAndroid Build Coastguard Worker ret <4 x i8> %4 163*9880d681SAndroid Build Coastguard Worker} 164*9880d681SAndroid Build Coastguard Worker 165*9880d681SAndroid Build Coastguard Workerdefine <4 x i8> @or_v4i8_as_i32(<4 x i8> %a, <4 x i8> %b) nounwind { 166*9880d681SAndroid Build Coastguard Worker; X32-SSE-LABEL: or_v4i8_as_i32: 167*9880d681SAndroid Build Coastguard Worker; X32-SSE: # BB#0: 168*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT: orps %xmm1, %xmm0 169*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT: retl 170*9880d681SAndroid Build Coastguard Worker; 171*9880d681SAndroid Build Coastguard Worker; X64-SSE-LABEL: or_v4i8_as_i32: 172*9880d681SAndroid Build Coastguard Worker; X64-SSE: # BB#0: 173*9880d681SAndroid Build Coastguard Worker; X64-SSE-NEXT: orps %xmm1, %xmm0 174*9880d681SAndroid Build Coastguard Worker; X64-SSE-NEXT: retq 175*9880d681SAndroid Build Coastguard Worker %1 = bitcast <4 x i8> %a to i32 176*9880d681SAndroid Build Coastguard Worker %2 = bitcast <4 x i8> %b to i32 177*9880d681SAndroid Build Coastguard Worker %3 = or i32 %1, %2 178*9880d681SAndroid Build Coastguard Worker %4 = bitcast i32 %3 to <4 x i8> 179*9880d681SAndroid Build Coastguard Worker ret <4 x i8> %4 180*9880d681SAndroid Build Coastguard Worker} 181*9880d681SAndroid Build Coastguard Worker 182*9880d681SAndroid Build Coastguard Worker; 183*9880d681SAndroid Build Coastguard Worker; AND/XOR/OR v8i4 as i32 184*9880d681SAndroid Build Coastguard Worker; 185*9880d681SAndroid Build Coastguard Worker 186*9880d681SAndroid Build Coastguard Workerdefine <8 x i4> @and_v8i4_as_i32(<8 x i4> %a, <8 x i4> %b) nounwind { 187*9880d681SAndroid Build Coastguard Worker; X32-SSE-LABEL: and_v8i4_as_i32: 188*9880d681SAndroid Build Coastguard Worker; X32-SSE: # BB#0: 189*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT: andps %xmm1, %xmm0 190*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT: retl 191*9880d681SAndroid Build Coastguard Worker; 192*9880d681SAndroid Build Coastguard Worker; X64-SSE-LABEL: and_v8i4_as_i32: 193*9880d681SAndroid Build Coastguard Worker; X64-SSE: # BB#0: 194*9880d681SAndroid Build Coastguard Worker; X64-SSE-NEXT: andps %xmm1, %xmm0 195*9880d681SAndroid Build Coastguard Worker; X64-SSE-NEXT: retq 196*9880d681SAndroid Build Coastguard Worker %1 = bitcast <8 x i4> %a to i32 197*9880d681SAndroid Build Coastguard Worker %2 = bitcast <8 x i4> %b to i32 198*9880d681SAndroid Build Coastguard Worker %3 = and i32 %1, %2 199*9880d681SAndroid Build Coastguard Worker %4 = bitcast i32 %3 to <8 x i4> 200*9880d681SAndroid Build Coastguard Worker ret <8 x i4> %4 201*9880d681SAndroid Build Coastguard Worker} 202*9880d681SAndroid Build Coastguard Worker 203*9880d681SAndroid Build Coastguard Workerdefine <8 x i4> @xor_v8i4_as_i32(<8 x i4> %a, <8 x i4> %b) nounwind { 204*9880d681SAndroid Build Coastguard Worker; X32-SSE-LABEL: xor_v8i4_as_i32: 205*9880d681SAndroid Build Coastguard Worker; X32-SSE: # BB#0: 206*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT: xorps %xmm1, %xmm0 207*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT: retl 208*9880d681SAndroid Build Coastguard Worker; 209*9880d681SAndroid Build Coastguard Worker; X64-SSE-LABEL: xor_v8i4_as_i32: 210*9880d681SAndroid Build Coastguard Worker; X64-SSE: # BB#0: 211*9880d681SAndroid Build Coastguard Worker; X64-SSE-NEXT: xorps %xmm1, %xmm0 212*9880d681SAndroid Build Coastguard Worker; X64-SSE-NEXT: retq 213*9880d681SAndroid Build Coastguard Worker %1 = bitcast <8 x i4> %a to i32 214*9880d681SAndroid Build Coastguard Worker %2 = bitcast <8 x i4> %b to i32 215*9880d681SAndroid Build Coastguard Worker %3 = xor i32 %1, %2 216*9880d681SAndroid Build Coastguard Worker %4 = bitcast i32 %3 to <8 x i4> 217*9880d681SAndroid Build Coastguard Worker ret <8 x i4> %4 218*9880d681SAndroid Build Coastguard Worker} 219*9880d681SAndroid Build Coastguard Worker 220*9880d681SAndroid Build Coastguard Workerdefine <8 x i4> @or_v8i4_as_i32(<8 x i4> %a, <8 x i4> %b) nounwind { 221*9880d681SAndroid Build Coastguard Worker; X32-SSE-LABEL: or_v8i4_as_i32: 222*9880d681SAndroid Build Coastguard Worker; X32-SSE: # BB#0: 223*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT: orps %xmm1, %xmm0 224*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT: retl 225*9880d681SAndroid Build Coastguard Worker; 226*9880d681SAndroid Build Coastguard Worker; X64-SSE-LABEL: or_v8i4_as_i32: 227*9880d681SAndroid Build Coastguard Worker; X64-SSE: # BB#0: 228*9880d681SAndroid Build Coastguard Worker; X64-SSE-NEXT: orps %xmm1, %xmm0 229*9880d681SAndroid Build Coastguard Worker; X64-SSE-NEXT: retq 230*9880d681SAndroid Build Coastguard Worker %1 = bitcast <8 x i4> %a to i32 231*9880d681SAndroid Build Coastguard Worker %2 = bitcast <8 x i4> %b to i32 232*9880d681SAndroid Build Coastguard Worker %3 = or i32 %1, %2 233*9880d681SAndroid Build Coastguard Worker %4 = bitcast i32 %3 to <8 x i4> 234*9880d681SAndroid Build Coastguard Worker ret <8 x i4> %4 235*9880d681SAndroid Build Coastguard Worker} 236