brintos

brintos / llvm-project-archived public Read only

0
0
Text · 5.8 KiB · dde4902 Raw
236 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py2; RUN: llc < %s -mtriple=i686-unknown -mattr=+sse4.2 | FileCheck %s --check-prefix=X863; RUN: llc < %s -mtriple=x86_64-unknown -mattr=+sse4.2 | FileCheck %s --check-prefix=X644 5;6; AND/XOR/OR i32 as v4i87;8 9define i32 @and_i32_as_v4i8(i32 %a, i32 %b) nounwind {10; X86-LABEL: and_i32_as_v4i8:11; X86:       # %bb.0:12; X86-NEXT:    movl {{[0-9]+}}(%esp), %eax13; X86-NEXT:    andl {{[0-9]+}}(%esp), %eax14; X86-NEXT:    retl15;16; X64-LABEL: and_i32_as_v4i8:17; X64:       # %bb.0:18; X64-NEXT:    movl %edi, %eax19; X64-NEXT:    andl %esi, %eax20; X64-NEXT:    retq21  %1 = bitcast i32 %a to <4 x i8>22  %2 = bitcast i32 %b to <4 x i8>23  %3 = and <4 x i8> %1, %224  %4 = bitcast <4 x i8> %3 to i3225  ret i32 %426}27 28define i32 @xor_i32_as_v4i8(i32 %a, i32 %b) nounwind {29; X86-LABEL: xor_i32_as_v4i8:30; X86:       # %bb.0:31; X86-NEXT:    movl {{[0-9]+}}(%esp), %eax32; X86-NEXT:    xorl {{[0-9]+}}(%esp), %eax33; X86-NEXT:    retl34;35; X64-LABEL: xor_i32_as_v4i8:36; X64:       # %bb.0:37; X64-NEXT:    movl %edi, %eax38; X64-NEXT:    xorl %esi, %eax39; X64-NEXT:    retq40  %1 = bitcast i32 %a to <4 x i8>41  %2 = bitcast i32 %b to <4 x i8>42  %3 = xor <4 x i8> %1, %243  %4 = bitcast <4 x i8> %3 to i3244  ret i32 %445}46 47define i32 @or_i32_as_v4i8(i32 %a, i32 %b) nounwind {48; X86-LABEL: or_i32_as_v4i8:49; X86:       # %bb.0:50; X86-NEXT:    movl {{[0-9]+}}(%esp), %eax51; X86-NEXT:    orl {{[0-9]+}}(%esp), %eax52; X86-NEXT:    retl53;54; X64-LABEL: or_i32_as_v4i8:55; X64:       # %bb.0:56; X64-NEXT:    movl %edi, %eax57; X64-NEXT:    orl %esi, %eax58; X64-NEXT:    retq59  %1 = bitcast i32 %a to <4 x i8>60  %2 = bitcast i32 %b to <4 x i8>61  %3 = or <4 x i8> %1, %262  %4 = bitcast <4 x i8> %3 to i3263  ret i32 %464}65 66;67; AND/XOR/OR i32 as v8i468;69 70define i32 @and_i32_as_v8i4(i32 %a, i32 %b) nounwind {71; X86-LABEL: and_i32_as_v8i4:72; X86:       # %bb.0:73; X86-NEXT:    movl {{[0-9]+}}(%esp), %eax74; X86-NEXT:    andl {{[0-9]+}}(%esp), %eax75; X86-NEXT:    retl76;77; X64-LABEL: and_i32_as_v8i4:78; X64:       # %bb.0:79; X64-NEXT:    movl %edi, %eax80; X64-NEXT:    andl %esi, %eax81; X64-NEXT:    retq82  %1 = bitcast i32 %a to <8 x i4>83  %2 = bitcast i32 %b to <8 x i4>84  %3 = and <8 x i4> %1, %285  %4 = bitcast <8 x i4> %3 to i3286  ret i32 %487}88 89define i32 @xor_i32_as_v8i4(i32 %a, i32 %b) nounwind {90; X86-LABEL: xor_i32_as_v8i4:91; X86:       # %bb.0:92; X86-NEXT:    movl {{[0-9]+}}(%esp), %eax93; X86-NEXT:    xorl {{[0-9]+}}(%esp), %eax94; X86-NEXT:    retl95;96; X64-LABEL: xor_i32_as_v8i4:97; X64:       # %bb.0:98; X64-NEXT:    movl %edi, %eax99; X64-NEXT:    xorl %esi, %eax100; X64-NEXT:    retq101  %1 = bitcast i32 %a to <8 x i4>102  %2 = bitcast i32 %b to <8 x i4>103  %3 = xor <8 x i4> %1, %2104  %4 = bitcast <8 x i4> %3 to i32105  ret i32 %4106}107 108define i32 @or_i32_as_v8i4(i32 %a, i32 %b) nounwind {109; X86-LABEL: or_i32_as_v8i4:110; X86:       # %bb.0:111; X86-NEXT:    movl {{[0-9]+}}(%esp), %eax112; X86-NEXT:    orl {{[0-9]+}}(%esp), %eax113; X86-NEXT:    retl114;115; X64-LABEL: or_i32_as_v8i4:116; X64:       # %bb.0:117; X64-NEXT:    movl %edi, %eax118; X64-NEXT:    orl %esi, %eax119; X64-NEXT:    retq120  %1 = bitcast i32 %a to <8 x i4>121  %2 = bitcast i32 %b to <8 x i4>122  %3 = or <8 x i4> %1, %2123  %4 = bitcast <8 x i4> %3 to i32124  ret i32 %4125}126 127;128; AND/XOR/OR v4i8 as i32129;130 131define <4 x i8> @and_v4i8_as_i32(<4 x i8> %a, <4 x i8> %b) nounwind {132; X86-LABEL: and_v4i8_as_i32:133; X86:       # %bb.0:134; X86-NEXT:    andps %xmm1, %xmm0135; X86-NEXT:    retl136;137; X64-LABEL: and_v4i8_as_i32:138; X64:       # %bb.0:139; X64-NEXT:    andps %xmm1, %xmm0140; X64-NEXT:    retq141  %1 = bitcast <4 x i8> %a to i32142  %2 = bitcast <4 x i8> %b to i32143  %3 = and i32 %1, %2144  %4 = bitcast i32 %3 to <4 x i8>145  ret <4 x i8>  %4146}147 148define <4 x i8> @xor_v4i8_as_i32(<4 x i8> %a, <4 x i8> %b) nounwind {149; X86-LABEL: xor_v4i8_as_i32:150; X86:       # %bb.0:151; X86-NEXT:    xorps %xmm1, %xmm0152; X86-NEXT:    retl153;154; X64-LABEL: xor_v4i8_as_i32:155; X64:       # %bb.0:156; X64-NEXT:    xorps %xmm1, %xmm0157; X64-NEXT:    retq158  %1 = bitcast <4 x i8> %a to i32159  %2 = bitcast <4 x i8> %b to i32160  %3 = xor i32 %1, %2161  %4 = bitcast i32 %3 to <4 x i8>162  ret <4 x i8>  %4163}164 165define <4 x i8> @or_v4i8_as_i32(<4 x i8> %a, <4 x i8> %b) nounwind {166; X86-LABEL: or_v4i8_as_i32:167; X86:       # %bb.0:168; X86-NEXT:    orps %xmm1, %xmm0169; X86-NEXT:    retl170;171; X64-LABEL: or_v4i8_as_i32:172; X64:       # %bb.0:173; X64-NEXT:    orps %xmm1, %xmm0174; X64-NEXT:    retq175  %1 = bitcast <4 x i8> %a to i32176  %2 = bitcast <4 x i8> %b to i32177  %3 = or i32 %1, %2178  %4 = bitcast i32 %3 to <4 x i8>179  ret <4 x i8>  %4180}181 182;183; AND/XOR/OR v8i4 as i32184;185 186define <8 x i4> @and_v8i4_as_i32(<8 x i4> %a, <8 x i4> %b) nounwind {187; X86-LABEL: and_v8i4_as_i32:188; X86:       # %bb.0:189; X86-NEXT:    andps %xmm1, %xmm0190; X86-NEXT:    retl191;192; X64-LABEL: and_v8i4_as_i32:193; X64:       # %bb.0:194; X64-NEXT:    andps %xmm1, %xmm0195; X64-NEXT:    retq196  %1 = bitcast <8 x i4> %a to i32197  %2 = bitcast <8 x i4> %b to i32198  %3 = and i32 %1, %2199  %4 = bitcast i32 %3 to <8 x i4>200  ret <8 x i4>  %4201}202 203define <8 x i4> @xor_v8i4_as_i32(<8 x i4> %a, <8 x i4> %b) nounwind {204; X86-LABEL: xor_v8i4_as_i32:205; X86:       # %bb.0:206; X86-NEXT:    xorps %xmm1, %xmm0207; X86-NEXT:    retl208;209; X64-LABEL: xor_v8i4_as_i32:210; X64:       # %bb.0:211; X64-NEXT:    xorps %xmm1, %xmm0212; X64-NEXT:    retq213  %1 = bitcast <8 x i4> %a to i32214  %2 = bitcast <8 x i4> %b to i32215  %3 = xor i32 %1, %2216  %4 = bitcast i32 %3 to <8 x i4>217  ret <8 x i4>  %4218}219 220define <8 x i4> @or_v8i4_as_i32(<8 x i4> %a, <8 x i4> %b) nounwind {221; X86-LABEL: or_v8i4_as_i32:222; X86:       # %bb.0:223; X86-NEXT:    orps %xmm1, %xmm0224; X86-NEXT:    retl225;226; X64-LABEL: or_v8i4_as_i32:227; X64:       # %bb.0:228; X64-NEXT:    orps %xmm1, %xmm0229; X64-NEXT:    retq230  %1 = bitcast <8 x i4> %a to i32231  %2 = bitcast <8 x i4> %b to i32232  %3 = or i32 %1, %2233  %4 = bitcast i32 %3 to <8 x i4>234  ret <8 x i4>  %4235}236