brintos

brintos / llvm-project-archived public Read only

0
0
Text · 160.8 KiB · 2e2e78a Raw
3587 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py2; RUN: llc -show-mc-encoding < %s -fast-isel -mtriple=i386-unknown-unknown -mattr=+sse | FileCheck %s --check-prefixes=CHECK,X86,SSE,X86-SSE,X86-SSE13; RUN: llc -show-mc-encoding < %s -fast-isel -mtriple=i386-unknown-unknown -mattr=+sse2 | FileCheck %s --check-prefixes=CHECK,X86,SSE,X86-SSE,X86-SSE24; RUN: llc -show-mc-encoding < %s -fast-isel -mtriple=i386-unknown-unknown -mattr=+avx | FileCheck %s --check-prefixes=CHECK,X86,AVX,X86-AVX,AVX1,X86-AVX15; RUN: llc -show-mc-encoding < %s -fast-isel -mtriple=i386-unknown-unknown -mattr=+avx512f,+avx512bw,+avx512dq,+avx512vl | FileCheck %s --check-prefixes=CHECK,X86,AVX,X86-AVX,AVX512,X86-AVX5126; RUN: llc -show-mc-encoding < %s -fast-isel -mtriple=x86_64-unknown-unknown -mattr=+sse,-sse2 | FileCheck %s --check-prefixes=CHECK,X64,SSE,X64-SSE,X64-SSE17; RUN: llc -show-mc-encoding < %s -fast-isel -mtriple=x86_64-unknown-unknown -mattr=+sse,+sse2 | FileCheck %s --check-prefixes=CHECK,X64,SSE,X64-SSE,X64-SSE28; RUN: llc -show-mc-encoding < %s -fast-isel -mtriple=x86_64-unknown-unknown -mattr=+avx | FileCheck %s --check-prefixes=CHECK,X64,AVX,X64-AVX,AVX1,X64-AVX19; RUN: llc -show-mc-encoding < %s -fast-isel -mtriple=x86_64-unknown-unknown -mattr=+avx512f,+avx512bw,+avx512dq,+avx512vl | FileCheck %s --check-prefixes=CHECK,X64,AVX,X64-AVX,AVX512,X64-AVX51210 11; NOTE: This should use IR equivalent to what is generated by clang/test/CodeGen/sse-builtins.c12 13define <4 x float> @test_mm_add_ps(<4 x float> %a0, <4 x float> %a1) nounwind {14; SSE-LABEL: test_mm_add_ps:15; SSE:       # %bb.0:16; SSE-NEXT:    addps %xmm1, %xmm0 # encoding: [0x0f,0x58,0xc1]17; SSE-NEXT:    ret{{[l|q]}} # encoding: [0xc3]18;19; AVX1-LABEL: test_mm_add_ps:20; AVX1:       # %bb.0:21; AVX1-NEXT:    vaddps %xmm1, %xmm0, %xmm0 # encoding: [0xc5,0xf8,0x58,0xc1]22; AVX1-NEXT:    ret{{[l|q]}} # encoding: [0xc3]23;24; AVX512-LABEL: test_mm_add_ps:25; AVX512:       # %bb.0:26; AVX512-NEXT:    vaddps %xmm1, %xmm0, %xmm0 # EVEX TO VEX Compression encoding: [0xc5,0xf8,0x58,0xc1]27; AVX512-NEXT:    ret{{[l|q]}} # encoding: [0xc3]28  %res = fadd <4 x float> %a0, %a129  ret <4 x float> %res30}31 32define <4 x float> @test_mm_add_ss(<4 x float> %a0, <4 x float> %a1) nounwind {33; SSE-LABEL: test_mm_add_ss:34; SSE:       # %bb.0:35; SSE-NEXT:    addss %xmm1, %xmm0 # encoding: [0xf3,0x0f,0x58,0xc1]36; SSE-NEXT:    ret{{[l|q]}} # encoding: [0xc3]37;38; AVX1-LABEL: test_mm_add_ss:39; AVX1:       # %bb.0:40; AVX1-NEXT:    vaddss %xmm1, %xmm0, %xmm0 # encoding: [0xc5,0xfa,0x58,0xc1]41; AVX1-NEXT:    ret{{[l|q]}} # encoding: [0xc3]42;43; AVX512-LABEL: test_mm_add_ss:44; AVX512:       # %bb.0:45; AVX512-NEXT:    vaddss %xmm1, %xmm0, %xmm0 # EVEX TO VEX Compression encoding: [0xc5,0xfa,0x58,0xc1]46; AVX512-NEXT:    ret{{[l|q]}} # encoding: [0xc3]47  %ext0 = extractelement <4 x float> %a0, i32 048  %ext1 = extractelement <4 x float> %a1, i32 049  %fadd = fadd float %ext0, %ext150  %res = insertelement <4 x float> %a0, float %fadd, i32 051  ret <4 x float> %res52}53 54define <4 x float> @test_mm_and_ps(<4 x float> %a0, <4 x float> %a1) nounwind {55; SSE-LABEL: test_mm_and_ps:56; SSE:       # %bb.0:57; SSE-NEXT:    andps %xmm1, %xmm0 # encoding: [0x0f,0x54,0xc1]58; SSE-NEXT:    ret{{[l|q]}} # encoding: [0xc3]59;60; AVX1-LABEL: test_mm_and_ps:61; AVX1:       # %bb.0:62; AVX1-NEXT:    vandps %xmm1, %xmm0, %xmm0 # encoding: [0xc5,0xf8,0x54,0xc1]63; AVX1-NEXT:    ret{{[l|q]}} # encoding: [0xc3]64;65; AVX512-LABEL: test_mm_and_ps:66; AVX512:       # %bb.0:67; AVX512-NEXT:    vandps %xmm1, %xmm0, %xmm0 # EVEX TO VEX Compression encoding: [0xc5,0xf8,0x54,0xc1]68; AVX512-NEXT:    ret{{[l|q]}} # encoding: [0xc3]69  %arg0 = bitcast <4 x float> %a0 to <4 x i32>70  %arg1 = bitcast <4 x float> %a1 to <4 x i32>71  %res = and <4 x i32> %arg0, %arg172  %bc = bitcast <4 x i32> %res to <4 x float>73  ret <4 x float> %bc74}75 76define <4 x float> @test_mm_andnot_ps(<4 x float> %a0, <4 x float> %a1) nounwind {77; X86-SSE1-LABEL: test_mm_andnot_ps:78; X86-SSE1:       # %bb.0:79; X86-SSE1-NEXT:    andnps %xmm1, %xmm0 # encoding: [0x0f,0x55,0xc1]80; X86-SSE1-NEXT:    retl # encoding: [0xc3]81;82; X86-SSE2-LABEL: test_mm_andnot_ps:83; X86-SSE2:       # %bb.0:84; X86-SSE2-NEXT:    pcmpeqd %xmm2, %xmm2 # encoding: [0x66,0x0f,0x76,0xd2]85; X86-SSE2-NEXT:    pxor %xmm2, %xmm0 # encoding: [0x66,0x0f,0xef,0xc2]86; X86-SSE2-NEXT:    pand %xmm1, %xmm0 # encoding: [0x66,0x0f,0xdb,0xc1]87; X86-SSE2-NEXT:    retl # encoding: [0xc3]88;89; AVX1-LABEL: test_mm_andnot_ps:90; AVX1:       # %bb.0:91; AVX1-NEXT:    vpcmpeqd %xmm2, %xmm2, %xmm2 # encoding: [0xc5,0xe9,0x76,0xd2]92; AVX1-NEXT:    vpxor %xmm2, %xmm0, %xmm0 # encoding: [0xc5,0xf9,0xef,0xc2]93; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm0 # encoding: [0xc5,0xf9,0xdb,0xc1]94; AVX1-NEXT:    ret{{[l|q]}} # encoding: [0xc3]95;96; AVX512-LABEL: test_mm_andnot_ps:97; AVX512:       # %bb.0:98; AVX512-NEXT:    vpternlogq $15, %xmm0, %xmm0, %xmm0 # encoding: [0x62,0xf3,0xfd,0x08,0x25,0xc0,0x0f]99; AVX512-NEXT:    # xmm0 = ~xmm0100; AVX512-NEXT:    vpand %xmm1, %xmm0, %xmm0 # EVEX TO VEX Compression encoding: [0xc5,0xf9,0xdb,0xc1]101; AVX512-NEXT:    ret{{[l|q]}} # encoding: [0xc3]102;103; X64-SSE1-LABEL: test_mm_andnot_ps:104; X64-SSE1:       # %bb.0:105; X64-SSE1-NEXT:    andnps %xmm1, %xmm0 # encoding: [0x0f,0x55,0xc1]106; X64-SSE1-NEXT:    retq # encoding: [0xc3]107;108; X64-SSE2-LABEL: test_mm_andnot_ps:109; X64-SSE2:       # %bb.0:110; X64-SSE2-NEXT:    pcmpeqd %xmm2, %xmm2 # encoding: [0x66,0x0f,0x76,0xd2]111; X64-SSE2-NEXT:    pxor %xmm2, %xmm0 # encoding: [0x66,0x0f,0xef,0xc2]112; X64-SSE2-NEXT:    pand %xmm1, %xmm0 # encoding: [0x66,0x0f,0xdb,0xc1]113; X64-SSE2-NEXT:    retq # encoding: [0xc3]114  %arg0 = bitcast <4 x float> %a0 to <4 x i32>115  %arg1 = bitcast <4 x float> %a1 to <4 x i32>116  %not = xor <4 x i32> %arg0, <i32 -1, i32 -1, i32 -1, i32 -1>117  %res = and <4 x i32> %not, %arg1118  %bc = bitcast <4 x i32> %res to <4 x float>119  ret <4 x float> %bc120}121 122define <4 x float> @test_mm_cmpeq_ps(<4 x float> %a0, <4 x float> %a1) nounwind {123; SSE-LABEL: test_mm_cmpeq_ps:124; SSE:       # %bb.0:125; SSE-NEXT:    cmpeqps %xmm1, %xmm0 # encoding: [0x0f,0xc2,0xc1,0x00]126; SSE-NEXT:    ret{{[l|q]}} # encoding: [0xc3]127;128; AVX1-LABEL: test_mm_cmpeq_ps:129; AVX1:       # %bb.0:130; AVX1-NEXT:    vcmpeqps %xmm1, %xmm0, %xmm0 # encoding: [0xc5,0xf8,0xc2,0xc1,0x00]131; AVX1-NEXT:    ret{{[l|q]}} # encoding: [0xc3]132;133; AVX512-LABEL: test_mm_cmpeq_ps:134; AVX512:       # %bb.0:135; AVX512-NEXT:    vcmpeqps %xmm1, %xmm0, %k0 # encoding: [0x62,0xf1,0x7c,0x08,0xc2,0xc1,0x00]136; AVX512-NEXT:    vpmovm2d %k0, %xmm0 # encoding: [0x62,0xf2,0x7e,0x08,0x38,0xc0]137; AVX512-NEXT:    ret{{[l|q]}} # encoding: [0xc3]138  %cmp = fcmp oeq <4 x float> %a0, %a1139  %sext = sext <4 x i1> %cmp to <4 x i32>140  %res = bitcast <4 x i32> %sext to <4 x float>141  ret <4 x float> %res142}143 144define <4 x float> @test_mm_cmpeq_ss(<4 x float> %a0, <4 x float> %a1) nounwind {145; SSE-LABEL: test_mm_cmpeq_ss:146; SSE:       # %bb.0:147; SSE-NEXT:    cmpeqss %xmm1, %xmm0 # encoding: [0xf3,0x0f,0xc2,0xc1,0x00]148; SSE-NEXT:    ret{{[l|q]}} # encoding: [0xc3]149;150; AVX-LABEL: test_mm_cmpeq_ss:151; AVX:       # %bb.0:152; AVX-NEXT:    vcmpeqss %xmm1, %xmm0, %xmm0 # encoding: [0xc5,0xfa,0xc2,0xc1,0x00]153; AVX-NEXT:    ret{{[l|q]}} # encoding: [0xc3]154  %res = call <4 x float> @llvm.x86.sse.cmp.ss(<4 x float> %a0, <4 x float> %a1, i8 0)155  ret <4 x float> %res156}157declare <4 x float> @llvm.x86.sse.cmp.ss(<4 x float>, <4 x float>, i8) nounwind readnone158 159define <4 x float> @test_mm_cmpge_ps(<4 x float> %a0, <4 x float> %a1) nounwind {160; SSE-LABEL: test_mm_cmpge_ps:161; SSE:       # %bb.0:162; SSE-NEXT:    cmpleps %xmm0, %xmm1 # encoding: [0x0f,0xc2,0xc8,0x02]163; SSE-NEXT:    movaps %xmm1, %xmm0 # encoding: [0x0f,0x28,0xc1]164; SSE-NEXT:    ret{{[l|q]}} # encoding: [0xc3]165;166; AVX1-LABEL: test_mm_cmpge_ps:167; AVX1:       # %bb.0:168; AVX1-NEXT:    vcmpleps %xmm0, %xmm1, %xmm0 # encoding: [0xc5,0xf0,0xc2,0xc0,0x02]169; AVX1-NEXT:    ret{{[l|q]}} # encoding: [0xc3]170;171; AVX512-LABEL: test_mm_cmpge_ps:172; AVX512:       # %bb.0:173; AVX512-NEXT:    vcmpleps %xmm0, %xmm1, %k0 # encoding: [0x62,0xf1,0x74,0x08,0xc2,0xc0,0x02]174; AVX512-NEXT:    vpmovm2d %k0, %xmm0 # encoding: [0x62,0xf2,0x7e,0x08,0x38,0xc0]175; AVX512-NEXT:    ret{{[l|q]}} # encoding: [0xc3]176  %cmp = fcmp ole <4 x float> %a1, %a0177  %sext = sext <4 x i1> %cmp to <4 x i32>178  %res = bitcast <4 x i32> %sext to <4 x float>179  ret <4 x float> %res180}181 182define <4 x float> @test_mm_cmpge_ss(<4 x float> %a0, <4 x float> %a1) nounwind {183; SSE-LABEL: test_mm_cmpge_ss:184; SSE:       # %bb.0:185; SSE-NEXT:    cmpless %xmm0, %xmm1 # encoding: [0xf3,0x0f,0xc2,0xc8,0x02]186; SSE-NEXT:    movss %xmm1, %xmm0 # encoding: [0xf3,0x0f,0x10,0xc1]187; SSE-NEXT:    # xmm0 = xmm1[0],xmm0[1,2,3]188; SSE-NEXT:    ret{{[l|q]}} # encoding: [0xc3]189;190; AVX-LABEL: test_mm_cmpge_ss:191; AVX:       # %bb.0:192; AVX-NEXT:    vcmpless %xmm0, %xmm1, %xmm1 # encoding: [0xc5,0xf2,0xc2,0xc8,0x02]193; AVX-NEXT:    vmovss %xmm1, %xmm0, %xmm0 # encoding: [0xc5,0xfa,0x10,0xc1]194; AVX-NEXT:    # xmm0 = xmm1[0],xmm0[1,2,3]195; AVX-NEXT:    ret{{[l|q]}} # encoding: [0xc3]196  %cmp = call <4 x float> @llvm.x86.sse.cmp.ss(<4 x float> %a1, <4 x float> %a0, i8 2)197  %res = shufflevector <4 x float> %a0, <4 x float> %cmp, <4 x i32> <i32 4, i32 1, i32 2, i32 3>198  ret <4 x float> %res199}200 201define <4 x float> @test_mm_cmpgt_ps(<4 x float> %a0, <4 x float> %a1) nounwind {202; SSE-LABEL: test_mm_cmpgt_ps:203; SSE:       # %bb.0:204; SSE-NEXT:    cmpltps %xmm0, %xmm1 # encoding: [0x0f,0xc2,0xc8,0x01]205; SSE-NEXT:    movaps %xmm1, %xmm0 # encoding: [0x0f,0x28,0xc1]206; SSE-NEXT:    ret{{[l|q]}} # encoding: [0xc3]207;208; AVX1-LABEL: test_mm_cmpgt_ps:209; AVX1:       # %bb.0:210; AVX1-NEXT:    vcmpltps %xmm0, %xmm1, %xmm0 # encoding: [0xc5,0xf0,0xc2,0xc0,0x01]211; AVX1-NEXT:    ret{{[l|q]}} # encoding: [0xc3]212;213; AVX512-LABEL: test_mm_cmpgt_ps:214; AVX512:       # %bb.0:215; AVX512-NEXT:    vcmpltps %xmm0, %xmm1, %k0 # encoding: [0x62,0xf1,0x74,0x08,0xc2,0xc0,0x01]216; AVX512-NEXT:    vpmovm2d %k0, %xmm0 # encoding: [0x62,0xf2,0x7e,0x08,0x38,0xc0]217; AVX512-NEXT:    ret{{[l|q]}} # encoding: [0xc3]218  %cmp = fcmp olt <4 x float> %a1, %a0219  %sext = sext <4 x i1> %cmp to <4 x i32>220  %res = bitcast <4 x i32> %sext to <4 x float>221  ret <4 x float> %res222}223 224define <4 x float> @test_mm_cmpgt_ss(<4 x float> %a0, <4 x float> %a1) nounwind {225; SSE-LABEL: test_mm_cmpgt_ss:226; SSE:       # %bb.0:227; SSE-NEXT:    cmpltss %xmm0, %xmm1 # encoding: [0xf3,0x0f,0xc2,0xc8,0x01]228; SSE-NEXT:    movss %xmm1, %xmm0 # encoding: [0xf3,0x0f,0x10,0xc1]229; SSE-NEXT:    # xmm0 = xmm1[0],xmm0[1,2,3]230; SSE-NEXT:    ret{{[l|q]}} # encoding: [0xc3]231;232; AVX-LABEL: test_mm_cmpgt_ss:233; AVX:       # %bb.0:234; AVX-NEXT:    vcmpltss %xmm0, %xmm1, %xmm1 # encoding: [0xc5,0xf2,0xc2,0xc8,0x01]235; AVX-NEXT:    vmovss %xmm1, %xmm0, %xmm0 # encoding: [0xc5,0xfa,0x10,0xc1]236; AVX-NEXT:    # xmm0 = xmm1[0],xmm0[1,2,3]237; AVX-NEXT:    ret{{[l|q]}} # encoding: [0xc3]238  %cmp = call <4 x float> @llvm.x86.sse.cmp.ss(<4 x float> %a1, <4 x float> %a0, i8 1)239  %res = shufflevector <4 x float> %a0, <4 x float> %cmp, <4 x i32> <i32 4, i32 1, i32 2, i32 3>240  ret <4 x float> %res241}242 243define <4 x float> @test_mm_cmple_ps(<4 x float> %a0, <4 x float> %a1) nounwind {244; SSE-LABEL: test_mm_cmple_ps:245; SSE:       # %bb.0:246; SSE-NEXT:    cmpleps %xmm1, %xmm0 # encoding: [0x0f,0xc2,0xc1,0x02]247; SSE-NEXT:    ret{{[l|q]}} # encoding: [0xc3]248;249; AVX1-LABEL: test_mm_cmple_ps:250; AVX1:       # %bb.0:251; AVX1-NEXT:    vcmpleps %xmm1, %xmm0, %xmm0 # encoding: [0xc5,0xf8,0xc2,0xc1,0x02]252; AVX1-NEXT:    ret{{[l|q]}} # encoding: [0xc3]253;254; AVX512-LABEL: test_mm_cmple_ps:255; AVX512:       # %bb.0:256; AVX512-NEXT:    vcmpleps %xmm1, %xmm0, %k0 # encoding: [0x62,0xf1,0x7c,0x08,0xc2,0xc1,0x02]257; AVX512-NEXT:    vpmovm2d %k0, %xmm0 # encoding: [0x62,0xf2,0x7e,0x08,0x38,0xc0]258; AVX512-NEXT:    ret{{[l|q]}} # encoding: [0xc3]259  %cmp = fcmp ole <4 x float> %a0, %a1260  %sext = sext <4 x i1> %cmp to <4 x i32>261  %res = bitcast <4 x i32> %sext to <4 x float>262  ret <4 x float> %res263}264 265define <4 x float> @test_mm_cmple_ss(<4 x float> %a0, <4 x float> %a1) nounwind {266; SSE-LABEL: test_mm_cmple_ss:267; SSE:       # %bb.0:268; SSE-NEXT:    cmpless %xmm1, %xmm0 # encoding: [0xf3,0x0f,0xc2,0xc1,0x02]269; SSE-NEXT:    ret{{[l|q]}} # encoding: [0xc3]270;271; AVX-LABEL: test_mm_cmple_ss:272; AVX:       # %bb.0:273; AVX-NEXT:    vcmpless %xmm1, %xmm0, %xmm0 # encoding: [0xc5,0xfa,0xc2,0xc1,0x02]274; AVX-NEXT:    ret{{[l|q]}} # encoding: [0xc3]275  %res = call <4 x float> @llvm.x86.sse.cmp.ss(<4 x float> %a0, <4 x float> %a1, i8 2)276  ret <4 x float> %res277}278 279define <4 x float> @test_mm_cmplt_ps(<4 x float> %a0, <4 x float> %a1) nounwind {280; SSE-LABEL: test_mm_cmplt_ps:281; SSE:       # %bb.0:282; SSE-NEXT:    cmpltps %xmm1, %xmm0 # encoding: [0x0f,0xc2,0xc1,0x01]283; SSE-NEXT:    ret{{[l|q]}} # encoding: [0xc3]284;285; AVX1-LABEL: test_mm_cmplt_ps:286; AVX1:       # %bb.0:287; AVX1-NEXT:    vcmpltps %xmm1, %xmm0, %xmm0 # encoding: [0xc5,0xf8,0xc2,0xc1,0x01]288; AVX1-NEXT:    ret{{[l|q]}} # encoding: [0xc3]289;290; AVX512-LABEL: test_mm_cmplt_ps:291; AVX512:       # %bb.0:292; AVX512-NEXT:    vcmpltps %xmm1, %xmm0, %k0 # encoding: [0x62,0xf1,0x7c,0x08,0xc2,0xc1,0x01]293; AVX512-NEXT:    vpmovm2d %k0, %xmm0 # encoding: [0x62,0xf2,0x7e,0x08,0x38,0xc0]294; AVX512-NEXT:    ret{{[l|q]}} # encoding: [0xc3]295  %cmp = fcmp olt <4 x float> %a0, %a1296  %sext = sext <4 x i1> %cmp to <4 x i32>297  %res = bitcast <4 x i32> %sext to <4 x float>298  ret <4 x float> %res299}300 301define <4 x float> @test_mm_cmplt_ss(<4 x float> %a0, <4 x float> %a1) nounwind {302; SSE-LABEL: test_mm_cmplt_ss:303; SSE:       # %bb.0:304; SSE-NEXT:    cmpltss %xmm1, %xmm0 # encoding: [0xf3,0x0f,0xc2,0xc1,0x01]305; SSE-NEXT:    ret{{[l|q]}} # encoding: [0xc3]306;307; AVX-LABEL: test_mm_cmplt_ss:308; AVX:       # %bb.0:309; AVX-NEXT:    vcmpltss %xmm1, %xmm0, %xmm0 # encoding: [0xc5,0xfa,0xc2,0xc1,0x01]310; AVX-NEXT:    ret{{[l|q]}} # encoding: [0xc3]311  %res = call <4 x float> @llvm.x86.sse.cmp.ss(<4 x float> %a0, <4 x float> %a1, i8 1)312  ret <4 x float> %res313}314 315define <4 x float> @test_mm_cmpneq_ps(<4 x float> %a0, <4 x float> %a1) nounwind {316; SSE-LABEL: test_mm_cmpneq_ps:317; SSE:       # %bb.0:318; SSE-NEXT:    cmpneqps %xmm1, %xmm0 # encoding: [0x0f,0xc2,0xc1,0x04]319; SSE-NEXT:    ret{{[l|q]}} # encoding: [0xc3]320;321; AVX1-LABEL: test_mm_cmpneq_ps:322; AVX1:       # %bb.0:323; AVX1-NEXT:    vcmpneqps %xmm1, %xmm0, %xmm0 # encoding: [0xc5,0xf8,0xc2,0xc1,0x04]324; AVX1-NEXT:    ret{{[l|q]}} # encoding: [0xc3]325;326; AVX512-LABEL: test_mm_cmpneq_ps:327; AVX512:       # %bb.0:328; AVX512-NEXT:    vcmpneqps %xmm1, %xmm0, %k0 # encoding: [0x62,0xf1,0x7c,0x08,0xc2,0xc1,0x04]329; AVX512-NEXT:    vpmovm2d %k0, %xmm0 # encoding: [0x62,0xf2,0x7e,0x08,0x38,0xc0]330; AVX512-NEXT:    ret{{[l|q]}} # encoding: [0xc3]331  %cmp = fcmp une <4 x float> %a0, %a1332  %sext = sext <4 x i1> %cmp to <4 x i32>333  %res = bitcast <4 x i32> %sext to <4 x float>334  ret <4 x float> %res335}336 337define <4 x float> @test_mm_cmpneq_ss(<4 x float> %a0, <4 x float> %a1) nounwind {338; SSE-LABEL: test_mm_cmpneq_ss:339; SSE:       # %bb.0:340; SSE-NEXT:    cmpneqss %xmm1, %xmm0 # encoding: [0xf3,0x0f,0xc2,0xc1,0x04]341; SSE-NEXT:    ret{{[l|q]}} # encoding: [0xc3]342;343; AVX-LABEL: test_mm_cmpneq_ss:344; AVX:       # %bb.0:345; AVX-NEXT:    vcmpneqss %xmm1, %xmm0, %xmm0 # encoding: [0xc5,0xfa,0xc2,0xc1,0x04]346; AVX-NEXT:    ret{{[l|q]}} # encoding: [0xc3]347  %res = call <4 x float> @llvm.x86.sse.cmp.ss(<4 x float> %a0, <4 x float> %a1, i8 4)348  ret <4 x float> %res349}350 351define <4 x float> @test_mm_cmpnge_ps(<4 x float> %a0, <4 x float> %a1) nounwind {352; SSE-LABEL: test_mm_cmpnge_ps:353; SSE:       # %bb.0:354; SSE-NEXT:    cmpnleps %xmm0, %xmm1 # encoding: [0x0f,0xc2,0xc8,0x06]355; SSE-NEXT:    movaps %xmm1, %xmm0 # encoding: [0x0f,0x28,0xc1]356; SSE-NEXT:    ret{{[l|q]}} # encoding: [0xc3]357;358; AVX1-LABEL: test_mm_cmpnge_ps:359; AVX1:       # %bb.0:360; AVX1-NEXT:    vcmpnleps %xmm0, %xmm1, %xmm0 # encoding: [0xc5,0xf0,0xc2,0xc0,0x06]361; AVX1-NEXT:    ret{{[l|q]}} # encoding: [0xc3]362;363; AVX512-LABEL: test_mm_cmpnge_ps:364; AVX512:       # %bb.0:365; AVX512-NEXT:    vcmpnleps %xmm0, %xmm1, %k0 # encoding: [0x62,0xf1,0x74,0x08,0xc2,0xc0,0x06]366; AVX512-NEXT:    vpmovm2d %k0, %xmm0 # encoding: [0x62,0xf2,0x7e,0x08,0x38,0xc0]367; AVX512-NEXT:    ret{{[l|q]}} # encoding: [0xc3]368  %cmp = fcmp ugt <4 x float> %a1, %a0369  %sext = sext <4 x i1> %cmp to <4 x i32>370  %res = bitcast <4 x i32> %sext to <4 x float>371  ret <4 x float> %res372}373 374define <4 x float> @test_mm_cmpnge_ss(<4 x float> %a0, <4 x float> %a1) nounwind {375; SSE-LABEL: test_mm_cmpnge_ss:376; SSE:       # %bb.0:377; SSE-NEXT:    cmpnless %xmm0, %xmm1 # encoding: [0xf3,0x0f,0xc2,0xc8,0x06]378; SSE-NEXT:    movss %xmm1, %xmm0 # encoding: [0xf3,0x0f,0x10,0xc1]379; SSE-NEXT:    # xmm0 = xmm1[0],xmm0[1,2,3]380; SSE-NEXT:    ret{{[l|q]}} # encoding: [0xc3]381;382; AVX-LABEL: test_mm_cmpnge_ss:383; AVX:       # %bb.0:384; AVX-NEXT:    vcmpnless %xmm0, %xmm1, %xmm1 # encoding: [0xc5,0xf2,0xc2,0xc8,0x06]385; AVX-NEXT:    vmovss %xmm1, %xmm0, %xmm0 # encoding: [0xc5,0xfa,0x10,0xc1]386; AVX-NEXT:    # xmm0 = xmm1[0],xmm0[1,2,3]387; AVX-NEXT:    ret{{[l|q]}} # encoding: [0xc3]388  %cmp = call <4 x float> @llvm.x86.sse.cmp.ss(<4 x float> %a1, <4 x float> %a0, i8 6)389  %res = shufflevector <4 x float> %a0, <4 x float> %cmp, <4 x i32> <i32 4, i32 1, i32 2, i32 3>390  ret <4 x float> %res391}392 393define <4 x float> @test_mm_cmpngt_ps(<4 x float> %a0, <4 x float> %a1) nounwind {394; SSE-LABEL: test_mm_cmpngt_ps:395; SSE:       # %bb.0:396; SSE-NEXT:    cmpnltps %xmm0, %xmm1 # encoding: [0x0f,0xc2,0xc8,0x05]397; SSE-NEXT:    movaps %xmm1, %xmm0 # encoding: [0x0f,0x28,0xc1]398; SSE-NEXT:    ret{{[l|q]}} # encoding: [0xc3]399;400; AVX1-LABEL: test_mm_cmpngt_ps:401; AVX1:       # %bb.0:402; AVX1-NEXT:    vcmpnltps %xmm0, %xmm1, %xmm0 # encoding: [0xc5,0xf0,0xc2,0xc0,0x05]403; AVX1-NEXT:    ret{{[l|q]}} # encoding: [0xc3]404;405; AVX512-LABEL: test_mm_cmpngt_ps:406; AVX512:       # %bb.0:407; AVX512-NEXT:    vcmpnltps %xmm0, %xmm1, %k0 # encoding: [0x62,0xf1,0x74,0x08,0xc2,0xc0,0x05]408; AVX512-NEXT:    vpmovm2d %k0, %xmm0 # encoding: [0x62,0xf2,0x7e,0x08,0x38,0xc0]409; AVX512-NEXT:    ret{{[l|q]}} # encoding: [0xc3]410  %cmp = fcmp uge <4 x float> %a1, %a0411  %sext = sext <4 x i1> %cmp to <4 x i32>412  %res = bitcast <4 x i32> %sext to <4 x float>413  ret <4 x float> %res414}415 416define <4 x float> @test_mm_cmpngt_ss(<4 x float> %a0, <4 x float> %a1) nounwind {417; SSE-LABEL: test_mm_cmpngt_ss:418; SSE:       # %bb.0:419; SSE-NEXT:    cmpnltss %xmm0, %xmm1 # encoding: [0xf3,0x0f,0xc2,0xc8,0x05]420; SSE-NEXT:    movss %xmm1, %xmm0 # encoding: [0xf3,0x0f,0x10,0xc1]421; SSE-NEXT:    # xmm0 = xmm1[0],xmm0[1,2,3]422; SSE-NEXT:    ret{{[l|q]}} # encoding: [0xc3]423;424; AVX-LABEL: test_mm_cmpngt_ss:425; AVX:       # %bb.0:426; AVX-NEXT:    vcmpnltss %xmm0, %xmm1, %xmm1 # encoding: [0xc5,0xf2,0xc2,0xc8,0x05]427; AVX-NEXT:    vmovss %xmm1, %xmm0, %xmm0 # encoding: [0xc5,0xfa,0x10,0xc1]428; AVX-NEXT:    # xmm0 = xmm1[0],xmm0[1,2,3]429; AVX-NEXT:    ret{{[l|q]}} # encoding: [0xc3]430  %cmp = call <4 x float> @llvm.x86.sse.cmp.ss(<4 x float> %a1, <4 x float> %a0, i8 5)431  %res = shufflevector <4 x float> %a0, <4 x float> %cmp, <4 x i32> <i32 4, i32 1, i32 2, i32 3>432  ret <4 x float> %res433}434 435define <4 x float> @test_mm_cmpnle_ps(<4 x float> %a0, <4 x float> %a1) nounwind {436; SSE-LABEL: test_mm_cmpnle_ps:437; SSE:       # %bb.0:438; SSE-NEXT:    cmpnleps %xmm1, %xmm0 # encoding: [0x0f,0xc2,0xc1,0x06]439; SSE-NEXT:    ret{{[l|q]}} # encoding: [0xc3]440;441; AVX1-LABEL: test_mm_cmpnle_ps:442; AVX1:       # %bb.0:443; AVX1-NEXT:    vcmpnleps %xmm1, %xmm0, %xmm0 # encoding: [0xc5,0xf8,0xc2,0xc1,0x06]444; AVX1-NEXT:    ret{{[l|q]}} # encoding: [0xc3]445;446; AVX512-LABEL: test_mm_cmpnle_ps:447; AVX512:       # %bb.0:448; AVX512-NEXT:    vcmpnleps %xmm1, %xmm0, %k0 # encoding: [0x62,0xf1,0x7c,0x08,0xc2,0xc1,0x06]449; AVX512-NEXT:    vpmovm2d %k0, %xmm0 # encoding: [0x62,0xf2,0x7e,0x08,0x38,0xc0]450; AVX512-NEXT:    ret{{[l|q]}} # encoding: [0xc3]451  %cmp = fcmp ugt <4 x float> %a0, %a1452  %sext = sext <4 x i1> %cmp to <4 x i32>453  %res = bitcast <4 x i32> %sext to <4 x float>454  ret <4 x float> %res455}456 457define <4 x float> @test_mm_cmpnle_ss(<4 x float> %a0, <4 x float> %a1) nounwind {458; SSE-LABEL: test_mm_cmpnle_ss:459; SSE:       # %bb.0:460; SSE-NEXT:    cmpnless %xmm1, %xmm0 # encoding: [0xf3,0x0f,0xc2,0xc1,0x06]461; SSE-NEXT:    ret{{[l|q]}} # encoding: [0xc3]462;463; AVX-LABEL: test_mm_cmpnle_ss:464; AVX:       # %bb.0:465; AVX-NEXT:    vcmpnless %xmm1, %xmm0, %xmm0 # encoding: [0xc5,0xfa,0xc2,0xc1,0x06]466; AVX-NEXT:    ret{{[l|q]}} # encoding: [0xc3]467  %res = call <4 x float> @llvm.x86.sse.cmp.ss(<4 x float> %a0, <4 x float> %a1, i8 6)468  ret <4 x float> %res469}470 471define <4 x float> @test_mm_cmpnlt_ps(<4 x float> %a0, <4 x float> %a1) nounwind {472; SSE-LABEL: test_mm_cmpnlt_ps:473; SSE:       # %bb.0:474; SSE-NEXT:    cmpnltps %xmm1, %xmm0 # encoding: [0x0f,0xc2,0xc1,0x05]475; SSE-NEXT:    ret{{[l|q]}} # encoding: [0xc3]476;477; AVX1-LABEL: test_mm_cmpnlt_ps:478; AVX1:       # %bb.0:479; AVX1-NEXT:    vcmpnltps %xmm1, %xmm0, %xmm0 # encoding: [0xc5,0xf8,0xc2,0xc1,0x05]480; AVX1-NEXT:    ret{{[l|q]}} # encoding: [0xc3]481;482; AVX512-LABEL: test_mm_cmpnlt_ps:483; AVX512:       # %bb.0:484; AVX512-NEXT:    vcmpnltps %xmm1, %xmm0, %k0 # encoding: [0x62,0xf1,0x7c,0x08,0xc2,0xc1,0x05]485; AVX512-NEXT:    vpmovm2d %k0, %xmm0 # encoding: [0x62,0xf2,0x7e,0x08,0x38,0xc0]486; AVX512-NEXT:    ret{{[l|q]}} # encoding: [0xc3]487  %cmp = fcmp uge <4 x float> %a0, %a1488  %sext = sext <4 x i1> %cmp to <4 x i32>489  %res = bitcast <4 x i32> %sext to <4 x float>490  ret <4 x float> %res491}492 493define <4 x float> @test_mm_cmpnlt_ss(<4 x float> %a0, <4 x float> %a1) nounwind {494; SSE-LABEL: test_mm_cmpnlt_ss:495; SSE:       # %bb.0:496; SSE-NEXT:    cmpnltss %xmm1, %xmm0 # encoding: [0xf3,0x0f,0xc2,0xc1,0x05]497; SSE-NEXT:    ret{{[l|q]}} # encoding: [0xc3]498;499; AVX-LABEL: test_mm_cmpnlt_ss:500; AVX:       # %bb.0:501; AVX-NEXT:    vcmpnltss %xmm1, %xmm0, %xmm0 # encoding: [0xc5,0xfa,0xc2,0xc1,0x05]502; AVX-NEXT:    ret{{[l|q]}} # encoding: [0xc3]503  %res = call <4 x float> @llvm.x86.sse.cmp.ss(<4 x float> %a0, <4 x float> %a1, i8 5)504  ret <4 x float> %res505}506 507define <4 x float> @test_mm_cmpord_ps(<4 x float> %a0, <4 x float> %a1) nounwind {508; SSE-LABEL: test_mm_cmpord_ps:509; SSE:       # %bb.0:510; SSE-NEXT:    cmpordps %xmm1, %xmm0 # encoding: [0x0f,0xc2,0xc1,0x07]511; SSE-NEXT:    ret{{[l|q]}} # encoding: [0xc3]512;513; AVX1-LABEL: test_mm_cmpord_ps:514; AVX1:       # %bb.0:515; AVX1-NEXT:    vcmpordps %xmm1, %xmm0, %xmm0 # encoding: [0xc5,0xf8,0xc2,0xc1,0x07]516; AVX1-NEXT:    ret{{[l|q]}} # encoding: [0xc3]517;518; AVX512-LABEL: test_mm_cmpord_ps:519; AVX512:       # %bb.0:520; AVX512-NEXT:    vcmpordps %xmm1, %xmm0, %k0 # encoding: [0x62,0xf1,0x7c,0x08,0xc2,0xc1,0x07]521; AVX512-NEXT:    vpmovm2d %k0, %xmm0 # encoding: [0x62,0xf2,0x7e,0x08,0x38,0xc0]522; AVX512-NEXT:    ret{{[l|q]}} # encoding: [0xc3]523  %cmp = fcmp ord <4 x float> %a0, %a1524  %sext = sext <4 x i1> %cmp to <4 x i32>525  %res = bitcast <4 x i32> %sext to <4 x float>526  ret <4 x float> %res527}528 529define <4 x float> @test_mm_cmpord_ss(<4 x float> %a0, <4 x float> %a1) nounwind {530; SSE-LABEL: test_mm_cmpord_ss:531; SSE:       # %bb.0:532; SSE-NEXT:    cmpordss %xmm1, %xmm0 # encoding: [0xf3,0x0f,0xc2,0xc1,0x07]533; SSE-NEXT:    ret{{[l|q]}} # encoding: [0xc3]534;535; AVX-LABEL: test_mm_cmpord_ss:536; AVX:       # %bb.0:537; AVX-NEXT:    vcmpordss %xmm1, %xmm0, %xmm0 # encoding: [0xc5,0xfa,0xc2,0xc1,0x07]538; AVX-NEXT:    ret{{[l|q]}} # encoding: [0xc3]539  %res = call <4 x float> @llvm.x86.sse.cmp.ss(<4 x float> %a0, <4 x float> %a1, i8 7)540  ret <4 x float> %res541}542 543define <4 x float> @test_mm_cmpunord_ps(<4 x float> %a0, <4 x float> %a1) nounwind {544; SSE-LABEL: test_mm_cmpunord_ps:545; SSE:       # %bb.0:546; SSE-NEXT:    cmpunordps %xmm1, %xmm0 # encoding: [0x0f,0xc2,0xc1,0x03]547; SSE-NEXT:    ret{{[l|q]}} # encoding: [0xc3]548;549; AVX1-LABEL: test_mm_cmpunord_ps:550; AVX1:       # %bb.0:551; AVX1-NEXT:    vcmpunordps %xmm1, %xmm0, %xmm0 # encoding: [0xc5,0xf8,0xc2,0xc1,0x03]552; AVX1-NEXT:    ret{{[l|q]}} # encoding: [0xc3]553;554; AVX512-LABEL: test_mm_cmpunord_ps:555; AVX512:       # %bb.0:556; AVX512-NEXT:    vcmpunordps %xmm1, %xmm0, %k0 # encoding: [0x62,0xf1,0x7c,0x08,0xc2,0xc1,0x03]557; AVX512-NEXT:    vpmovm2d %k0, %xmm0 # encoding: [0x62,0xf2,0x7e,0x08,0x38,0xc0]558; AVX512-NEXT:    ret{{[l|q]}} # encoding: [0xc3]559  %cmp = fcmp uno <4 x float> %a0, %a1560  %sext = sext <4 x i1> %cmp to <4 x i32>561  %res = bitcast <4 x i32> %sext to <4 x float>562  ret <4 x float> %res563}564 565define <4 x float> @test_mm_cmpunord_ss(<4 x float> %a0, <4 x float> %a1) nounwind {566; SSE-LABEL: test_mm_cmpunord_ss:567; SSE:       # %bb.0:568; SSE-NEXT:    cmpunordss %xmm1, %xmm0 # encoding: [0xf3,0x0f,0xc2,0xc1,0x03]569; SSE-NEXT:    ret{{[l|q]}} # encoding: [0xc3]570;571; AVX-LABEL: test_mm_cmpunord_ss:572; AVX:       # %bb.0:573; AVX-NEXT:    vcmpunordss %xmm1, %xmm0, %xmm0 # encoding: [0xc5,0xfa,0xc2,0xc1,0x03]574; AVX-NEXT:    ret{{[l|q]}} # encoding: [0xc3]575  %res = call <4 x float> @llvm.x86.sse.cmp.ss(<4 x float> %a0, <4 x float> %a1, i8 3)576  ret <4 x float> %res577}578 579define i32 @test_mm_comieq_ss(<4 x float> %a0, <4 x float> %a1) nounwind {580; SSE-LABEL: test_mm_comieq_ss:581; SSE:       # %bb.0:582; SSE-NEXT:    comiss %xmm1, %xmm0 # encoding: [0x0f,0x2f,0xc1]583; SSE-NEXT:    setnp %al # encoding: [0x0f,0x9b,0xc0]584; SSE-NEXT:    sete %cl # encoding: [0x0f,0x94,0xc1]585; SSE-NEXT:    andb %al, %cl # encoding: [0x20,0xc1]586; SSE-NEXT:    movzbl %cl, %eax # encoding: [0x0f,0xb6,0xc1]587; SSE-NEXT:    ret{{[l|q]}} # encoding: [0xc3]588;589; AVX1-LABEL: test_mm_comieq_ss:590; AVX1:       # %bb.0:591; AVX1-NEXT:    vcomiss %xmm1, %xmm0 # encoding: [0xc5,0xf8,0x2f,0xc1]592; AVX1-NEXT:    setnp %al # encoding: [0x0f,0x9b,0xc0]593; AVX1-NEXT:    sete %cl # encoding: [0x0f,0x94,0xc1]594; AVX1-NEXT:    andb %al, %cl # encoding: [0x20,0xc1]595; AVX1-NEXT:    movzbl %cl, %eax # encoding: [0x0f,0xb6,0xc1]596; AVX1-NEXT:    ret{{[l|q]}} # encoding: [0xc3]597;598; AVX512-LABEL: test_mm_comieq_ss:599; AVX512:       # %bb.0:600; AVX512-NEXT:    vcomiss %xmm1, %xmm0 # EVEX TO VEX Compression encoding: [0xc5,0xf8,0x2f,0xc1]601; AVX512-NEXT:    setnp %al # encoding: [0x0f,0x9b,0xc0]602; AVX512-NEXT:    sete %cl # encoding: [0x0f,0x94,0xc1]603; AVX512-NEXT:    andb %al, %cl # encoding: [0x20,0xc1]604; AVX512-NEXT:    movzbl %cl, %eax # encoding: [0x0f,0xb6,0xc1]605; AVX512-NEXT:    ret{{[l|q]}} # encoding: [0xc3]606  %res = call i32 @llvm.x86.sse.comieq.ss(<4 x float> %a0, <4 x float> %a1)607  ret i32 %res608}609declare i32 @llvm.x86.sse.comieq.ss(<4 x float>, <4 x float>) nounwind readnone610 611define i32 @test_mm_comige_ss(<4 x float> %a0, <4 x float> %a1) nounwind {612; SSE-LABEL: test_mm_comige_ss:613; SSE:       # %bb.0:614; SSE-NEXT:    xorl %eax, %eax # encoding: [0x31,0xc0]615; SSE-NEXT:    comiss %xmm1, %xmm0 # encoding: [0x0f,0x2f,0xc1]616; SSE-NEXT:    setae %al # encoding: [0x0f,0x93,0xc0]617; SSE-NEXT:    ret{{[l|q]}} # encoding: [0xc3]618;619; AVX1-LABEL: test_mm_comige_ss:620; AVX1:       # %bb.0:621; AVX1-NEXT:    xorl %eax, %eax # encoding: [0x31,0xc0]622; AVX1-NEXT:    vcomiss %xmm1, %xmm0 # encoding: [0xc5,0xf8,0x2f,0xc1]623; AVX1-NEXT:    setae %al # encoding: [0x0f,0x93,0xc0]624; AVX1-NEXT:    ret{{[l|q]}} # encoding: [0xc3]625;626; AVX512-LABEL: test_mm_comige_ss:627; AVX512:       # %bb.0:628; AVX512-NEXT:    xorl %eax, %eax # encoding: [0x31,0xc0]629; AVX512-NEXT:    vcomiss %xmm1, %xmm0 # EVEX TO VEX Compression encoding: [0xc5,0xf8,0x2f,0xc1]630; AVX512-NEXT:    setae %al # encoding: [0x0f,0x93,0xc0]631; AVX512-NEXT:    ret{{[l|q]}} # encoding: [0xc3]632  %res = call i32 @llvm.x86.sse.comige.ss(<4 x float> %a0, <4 x float> %a1)633  ret i32 %res634}635declare i32 @llvm.x86.sse.comige.ss(<4 x float>, <4 x float>) nounwind readnone636 637define i32 @test_mm_comigt_ss(<4 x float> %a0, <4 x float> %a1) nounwind {638; SSE-LABEL: test_mm_comigt_ss:639; SSE:       # %bb.0:640; SSE-NEXT:    xorl %eax, %eax # encoding: [0x31,0xc0]641; SSE-NEXT:    comiss %xmm1, %xmm0 # encoding: [0x0f,0x2f,0xc1]642; SSE-NEXT:    seta %al # encoding: [0x0f,0x97,0xc0]643; SSE-NEXT:    ret{{[l|q]}} # encoding: [0xc3]644;645; AVX1-LABEL: test_mm_comigt_ss:646; AVX1:       # %bb.0:647; AVX1-NEXT:    xorl %eax, %eax # encoding: [0x31,0xc0]648; AVX1-NEXT:    vcomiss %xmm1, %xmm0 # encoding: [0xc5,0xf8,0x2f,0xc1]649; AVX1-NEXT:    seta %al # encoding: [0x0f,0x97,0xc0]650; AVX1-NEXT:    ret{{[l|q]}} # encoding: [0xc3]651;652; AVX512-LABEL: test_mm_comigt_ss:653; AVX512:       # %bb.0:654; AVX512-NEXT:    xorl %eax, %eax # encoding: [0x31,0xc0]655; AVX512-NEXT:    vcomiss %xmm1, %xmm0 # EVEX TO VEX Compression encoding: [0xc5,0xf8,0x2f,0xc1]656; AVX512-NEXT:    seta %al # encoding: [0x0f,0x97,0xc0]657; AVX512-NEXT:    ret{{[l|q]}} # encoding: [0xc3]658  %res = call i32 @llvm.x86.sse.comigt.ss(<4 x float> %a0, <4 x float> %a1)659  ret i32 %res660}661declare i32 @llvm.x86.sse.comigt.ss(<4 x float>, <4 x float>) nounwind readnone662 663define i32 @test_mm_comile_ss(<4 x float> %a0, <4 x float> %a1) nounwind {664; SSE-LABEL: test_mm_comile_ss:665; SSE:       # %bb.0:666; SSE-NEXT:    xorl %eax, %eax # encoding: [0x31,0xc0]667; SSE-NEXT:    comiss %xmm0, %xmm1 # encoding: [0x0f,0x2f,0xc8]668; SSE-NEXT:    setae %al # encoding: [0x0f,0x93,0xc0]669; SSE-NEXT:    ret{{[l|q]}} # encoding: [0xc3]670;671; AVX1-LABEL: test_mm_comile_ss:672; AVX1:       # %bb.0:673; AVX1-NEXT:    xorl %eax, %eax # encoding: [0x31,0xc0]674; AVX1-NEXT:    vcomiss %xmm0, %xmm1 # encoding: [0xc5,0xf8,0x2f,0xc8]675; AVX1-NEXT:    setae %al # encoding: [0x0f,0x93,0xc0]676; AVX1-NEXT:    ret{{[l|q]}} # encoding: [0xc3]677;678; AVX512-LABEL: test_mm_comile_ss:679; AVX512:       # %bb.0:680; AVX512-NEXT:    xorl %eax, %eax # encoding: [0x31,0xc0]681; AVX512-NEXT:    vcomiss %xmm0, %xmm1 # EVEX TO VEX Compression encoding: [0xc5,0xf8,0x2f,0xc8]682; AVX512-NEXT:    setae %al # encoding: [0x0f,0x93,0xc0]683; AVX512-NEXT:    ret{{[l|q]}} # encoding: [0xc3]684  %res = call i32 @llvm.x86.sse.comile.ss(<4 x float> %a0, <4 x float> %a1)685  ret i32 %res686}687declare i32 @llvm.x86.sse.comile.ss(<4 x float>, <4 x float>) nounwind readnone688 689define i32 @test_mm_comilt_ss(<4 x float> %a0, <4 x float> %a1) nounwind {690; SSE-LABEL: test_mm_comilt_ss:691; SSE:       # %bb.0:692; SSE-NEXT:    xorl %eax, %eax # encoding: [0x31,0xc0]693; SSE-NEXT:    comiss %xmm0, %xmm1 # encoding: [0x0f,0x2f,0xc8]694; SSE-NEXT:    seta %al # encoding: [0x0f,0x97,0xc0]695; SSE-NEXT:    ret{{[l|q]}} # encoding: [0xc3]696;697; AVX1-LABEL: test_mm_comilt_ss:698; AVX1:       # %bb.0:699; AVX1-NEXT:    xorl %eax, %eax # encoding: [0x31,0xc0]700; AVX1-NEXT:    vcomiss %xmm0, %xmm1 # encoding: [0xc5,0xf8,0x2f,0xc8]701; AVX1-NEXT:    seta %al # encoding: [0x0f,0x97,0xc0]702; AVX1-NEXT:    ret{{[l|q]}} # encoding: [0xc3]703;704; AVX512-LABEL: test_mm_comilt_ss:705; AVX512:       # %bb.0:706; AVX512-NEXT:    xorl %eax, %eax # encoding: [0x31,0xc0]707; AVX512-NEXT:    vcomiss %xmm0, %xmm1 # EVEX TO VEX Compression encoding: [0xc5,0xf8,0x2f,0xc8]708; AVX512-NEXT:    seta %al # encoding: [0x0f,0x97,0xc0]709; AVX512-NEXT:    ret{{[l|q]}} # encoding: [0xc3]710  %res = call i32 @llvm.x86.sse.comilt.ss(<4 x float> %a0, <4 x float> %a1)711  ret i32 %res712}713declare i32 @llvm.x86.sse.comilt.ss(<4 x float>, <4 x float>) nounwind readnone714 715define i32 @test_mm_comineq_ss(<4 x float> %a0, <4 x float> %a1) nounwind {716; SSE-LABEL: test_mm_comineq_ss:717; SSE:       # %bb.0:718; SSE-NEXT:    comiss %xmm1, %xmm0 # encoding: [0x0f,0x2f,0xc1]719; SSE-NEXT:    setp %al # encoding: [0x0f,0x9a,0xc0]720; SSE-NEXT:    setne %cl # encoding: [0x0f,0x95,0xc1]721; SSE-NEXT:    orb %al, %cl # encoding: [0x08,0xc1]722; SSE-NEXT:    movzbl %cl, %eax # encoding: [0x0f,0xb6,0xc1]723; SSE-NEXT:    ret{{[l|q]}} # encoding: [0xc3]724;725; AVX1-LABEL: test_mm_comineq_ss:726; AVX1:       # %bb.0:727; AVX1-NEXT:    vcomiss %xmm1, %xmm0 # encoding: [0xc5,0xf8,0x2f,0xc1]728; AVX1-NEXT:    setp %al # encoding: [0x0f,0x9a,0xc0]729; AVX1-NEXT:    setne %cl # encoding: [0x0f,0x95,0xc1]730; AVX1-NEXT:    orb %al, %cl # encoding: [0x08,0xc1]731; AVX1-NEXT:    movzbl %cl, %eax # encoding: [0x0f,0xb6,0xc1]732; AVX1-NEXT:    ret{{[l|q]}} # encoding: [0xc3]733;734; AVX512-LABEL: test_mm_comineq_ss:735; AVX512:       # %bb.0:736; AVX512-NEXT:    vcomiss %xmm1, %xmm0 # EVEX TO VEX Compression encoding: [0xc5,0xf8,0x2f,0xc1]737; AVX512-NEXT:    setp %al # encoding: [0x0f,0x9a,0xc0]738; AVX512-NEXT:    setne %cl # encoding: [0x0f,0x95,0xc1]739; AVX512-NEXT:    orb %al, %cl # encoding: [0x08,0xc1]740; AVX512-NEXT:    movzbl %cl, %eax # encoding: [0x0f,0xb6,0xc1]741; AVX512-NEXT:    ret{{[l|q]}} # encoding: [0xc3]742  %res = call i32 @llvm.x86.sse.comineq.ss(<4 x float> %a0, <4 x float> %a1)743  ret i32 %res744}745declare i32 @llvm.x86.sse.comineq.ss(<4 x float>, <4 x float>) nounwind readnone746 747define i32 @test_mm_cvt_ss2si(<4 x float> %a0) nounwind {748; SSE-LABEL: test_mm_cvt_ss2si:749; SSE:       # %bb.0:750; SSE-NEXT:    cvtss2si %xmm0, %eax # encoding: [0xf3,0x0f,0x2d,0xc0]751; SSE-NEXT:    ret{{[l|q]}} # encoding: [0xc3]752;753; AVX1-LABEL: test_mm_cvt_ss2si:754; AVX1:       # %bb.0:755; AVX1-NEXT:    vcvtss2si %xmm0, %eax # encoding: [0xc5,0xfa,0x2d,0xc0]756; AVX1-NEXT:    ret{{[l|q]}} # encoding: [0xc3]757;758; AVX512-LABEL: test_mm_cvt_ss2si:759; AVX512:       # %bb.0:760; AVX512-NEXT:    vcvtss2si %xmm0, %eax # EVEX TO VEX Compression encoding: [0xc5,0xfa,0x2d,0xc0]761; AVX512-NEXT:    ret{{[l|q]}} # encoding: [0xc3]762  %res = call i32 @llvm.x86.sse.cvtss2si(<4 x float> %a0)763  ret i32 %res764}765declare i32 @llvm.x86.sse.cvtss2si(<4 x float>) nounwind readnone766 767define <4 x float> @test_mm_cvtsi32_ss(<4 x float> %a0, i32 %a1) nounwind {768; X86-SSE-LABEL: test_mm_cvtsi32_ss:769; X86-SSE:       # %bb.0:770; X86-SSE-NEXT:    cvtsi2ssl {{[0-9]+}}(%esp), %xmm0 # encoding: [0xf3,0x0f,0x2a,0x44,0x24,0x04]771; X86-SSE-NEXT:    retl # encoding: [0xc3]772;773; X86-AVX1-LABEL: test_mm_cvtsi32_ss:774; X86-AVX1:       # %bb.0:775; X86-AVX1-NEXT:    vcvtsi2ssl {{[0-9]+}}(%esp), %xmm0, %xmm0 # encoding: [0xc5,0xfa,0x2a,0x44,0x24,0x04]776; X86-AVX1-NEXT:    retl # encoding: [0xc3]777;778; X86-AVX512-LABEL: test_mm_cvtsi32_ss:779; X86-AVX512:       # %bb.0:780; X86-AVX512-NEXT:    vcvtsi2ssl {{[0-9]+}}(%esp), %xmm0, %xmm0 # EVEX TO VEX Compression encoding: [0xc5,0xfa,0x2a,0x44,0x24,0x04]781; X86-AVX512-NEXT:    retl # encoding: [0xc3]782;783; X64-SSE-LABEL: test_mm_cvtsi32_ss:784; X64-SSE:       # %bb.0:785; X64-SSE-NEXT:    cvtsi2ss %edi, %xmm0 # encoding: [0xf3,0x0f,0x2a,0xc7]786; X64-SSE-NEXT:    retq # encoding: [0xc3]787;788; X64-AVX1-LABEL: test_mm_cvtsi32_ss:789; X64-AVX1:       # %bb.0:790; X64-AVX1-NEXT:    vcvtsi2ss %edi, %xmm0, %xmm0 # encoding: [0xc5,0xfa,0x2a,0xc7]791; X64-AVX1-NEXT:    retq # encoding: [0xc3]792;793; X64-AVX512-LABEL: test_mm_cvtsi32_ss:794; X64-AVX512:       # %bb.0:795; X64-AVX512-NEXT:    vcvtsi2ss %edi, %xmm0, %xmm0 # EVEX TO VEX Compression encoding: [0xc5,0xfa,0x2a,0xc7]796; X64-AVX512-NEXT:    retq # encoding: [0xc3]797  %res = call <4 x float> @llvm.x86.sse.cvtsi2ss(<4 x float> %a0, i32 %a1)798  ret <4 x float> %res799}800declare <4 x float> @llvm.x86.sse.cvtsi2ss(<4 x float>, i32) nounwind readnone801 802define float @test_mm_cvtss_f32(<4 x float> %a0) nounwind {803; X86-SSE-LABEL: test_mm_cvtss_f32:804; X86-SSE:       # %bb.0:805; X86-SSE-NEXT:    pushl %eax # encoding: [0x50]806; X86-SSE-NEXT:    movss %xmm0, (%esp) # encoding: [0xf3,0x0f,0x11,0x04,0x24]807; X86-SSE-NEXT:    flds (%esp) # encoding: [0xd9,0x04,0x24]808; X86-SSE-NEXT:    popl %eax # encoding: [0x58]809; X86-SSE-NEXT:    retl # encoding: [0xc3]810;811; X86-AVX1-LABEL: test_mm_cvtss_f32:812; X86-AVX1:       # %bb.0:813; X86-AVX1-NEXT:    pushl %eax # encoding: [0x50]814; X86-AVX1-NEXT:    vmovss %xmm0, (%esp) # encoding: [0xc5,0xfa,0x11,0x04,0x24]815; X86-AVX1-NEXT:    flds (%esp) # encoding: [0xd9,0x04,0x24]816; X86-AVX1-NEXT:    popl %eax # encoding: [0x58]817; X86-AVX1-NEXT:    retl # encoding: [0xc3]818;819; X86-AVX512-LABEL: test_mm_cvtss_f32:820; X86-AVX512:       # %bb.0:821; X86-AVX512-NEXT:    pushl %eax # encoding: [0x50]822; X86-AVX512-NEXT:    vmovss %xmm0, (%esp) # EVEX TO VEX Compression encoding: [0xc5,0xfa,0x11,0x04,0x24]823; X86-AVX512-NEXT:    flds (%esp) # encoding: [0xd9,0x04,0x24]824; X86-AVX512-NEXT:    popl %eax # encoding: [0x58]825; X86-AVX512-NEXT:    retl # encoding: [0xc3]826;827; X64-LABEL: test_mm_cvtss_f32:828; X64:       # %bb.0:829; X64-NEXT:    retq # encoding: [0xc3]830  %res = extractelement <4 x float> %a0, i32 0831  ret float %res832}833 834define i32 @test_mm_cvtss_si32(<4 x float> %a0) nounwind {835; SSE-LABEL: test_mm_cvtss_si32:836; SSE:       # %bb.0:837; SSE-NEXT:    cvtss2si %xmm0, %eax # encoding: [0xf3,0x0f,0x2d,0xc0]838; SSE-NEXT:    ret{{[l|q]}} # encoding: [0xc3]839;840; AVX1-LABEL: test_mm_cvtss_si32:841; AVX1:       # %bb.0:842; AVX1-NEXT:    vcvtss2si %xmm0, %eax # encoding: [0xc5,0xfa,0x2d,0xc0]843; AVX1-NEXT:    ret{{[l|q]}} # encoding: [0xc3]844;845; AVX512-LABEL: test_mm_cvtss_si32:846; AVX512:       # %bb.0:847; AVX512-NEXT:    vcvtss2si %xmm0, %eax # EVEX TO VEX Compression encoding: [0xc5,0xfa,0x2d,0xc0]848; AVX512-NEXT:    ret{{[l|q]}} # encoding: [0xc3]849  %res = call i32 @llvm.x86.sse.cvtss2si(<4 x float> %a0)850  ret i32 %res851}852 853define i32 @test_mm_cvttss_si(<4 x float> %a0) nounwind {854; SSE-LABEL: test_mm_cvttss_si:855; SSE:       # %bb.0:856; SSE-NEXT:    cvttss2si %xmm0, %eax # encoding: [0xf3,0x0f,0x2c,0xc0]857; SSE-NEXT:    ret{{[l|q]}} # encoding: [0xc3]858;859; AVX1-LABEL: test_mm_cvttss_si:860; AVX1:       # %bb.0:861; AVX1-NEXT:    vcvttss2si %xmm0, %eax # encoding: [0xc5,0xfa,0x2c,0xc0]862; AVX1-NEXT:    ret{{[l|q]}} # encoding: [0xc3]863;864; AVX512-LABEL: test_mm_cvttss_si:865; AVX512:       # %bb.0:866; AVX512-NEXT:    vcvttss2si %xmm0, %eax # EVEX TO VEX Compression encoding: [0xc5,0xfa,0x2c,0xc0]867; AVX512-NEXT:    ret{{[l|q]}} # encoding: [0xc3]868  %res = call i32 @llvm.x86.sse.cvttss2si(<4 x float> %a0)869  ret i32 %res870}871declare i32 @llvm.x86.sse.cvttss2si(<4 x float>) nounwind readnone872 873define i32 @test_mm_cvttss_si32(<4 x float> %a0) nounwind {874; SSE-LABEL: test_mm_cvttss_si32:875; SSE:       # %bb.0:876; SSE-NEXT:    cvttss2si %xmm0, %eax # encoding: [0xf3,0x0f,0x2c,0xc0]877; SSE-NEXT:    ret{{[l|q]}} # encoding: [0xc3]878;879; AVX1-LABEL: test_mm_cvttss_si32:880; AVX1:       # %bb.0:881; AVX1-NEXT:    vcvttss2si %xmm0, %eax # encoding: [0xc5,0xfa,0x2c,0xc0]882; AVX1-NEXT:    ret{{[l|q]}} # encoding: [0xc3]883;884; AVX512-LABEL: test_mm_cvttss_si32:885; AVX512:       # %bb.0:886; AVX512-NEXT:    vcvttss2si %xmm0, %eax # EVEX TO VEX Compression encoding: [0xc5,0xfa,0x2c,0xc0]887; AVX512-NEXT:    ret{{[l|q]}} # encoding: [0xc3]888  %res = call i32 @llvm.x86.sse.cvttss2si(<4 x float> %a0)889  ret i32 %res890}891 892define <4 x float> @test_mm_div_ps(<4 x float> %a0, <4 x float> %a1) nounwind {893; SSE-LABEL: test_mm_div_ps:894; SSE:       # %bb.0:895; SSE-NEXT:    divps %xmm1, %xmm0 # encoding: [0x0f,0x5e,0xc1]896; SSE-NEXT:    ret{{[l|q]}} # encoding: [0xc3]897;898; AVX1-LABEL: test_mm_div_ps:899; AVX1:       # %bb.0:900; AVX1-NEXT:    vdivps %xmm1, %xmm0, %xmm0 # encoding: [0xc5,0xf8,0x5e,0xc1]901; AVX1-NEXT:    ret{{[l|q]}} # encoding: [0xc3]902;903; AVX512-LABEL: test_mm_div_ps:904; AVX512:       # %bb.0:905; AVX512-NEXT:    vdivps %xmm1, %xmm0, %xmm0 # EVEX TO VEX Compression encoding: [0xc5,0xf8,0x5e,0xc1]906; AVX512-NEXT:    ret{{[l|q]}} # encoding: [0xc3]907  %res = fdiv <4 x float> %a0, %a1908  ret <4 x float> %res909}910 911define <4 x float> @test_mm_div_ss(<4 x float> %a0, <4 x float> %a1) nounwind {912; SSE-LABEL: test_mm_div_ss:913; SSE:       # %bb.0:914; SSE-NEXT:    divss %xmm1, %xmm0 # encoding: [0xf3,0x0f,0x5e,0xc1]915; SSE-NEXT:    ret{{[l|q]}} # encoding: [0xc3]916;917; AVX1-LABEL: test_mm_div_ss:918; AVX1:       # %bb.0:919; AVX1-NEXT:    vdivss %xmm1, %xmm0, %xmm0 # encoding: [0xc5,0xfa,0x5e,0xc1]920; AVX1-NEXT:    ret{{[l|q]}} # encoding: [0xc3]921;922; AVX512-LABEL: test_mm_div_ss:923; AVX512:       # %bb.0:924; AVX512-NEXT:    vdivss %xmm1, %xmm0, %xmm0 # EVEX TO VEX Compression encoding: [0xc5,0xfa,0x5e,0xc1]925; AVX512-NEXT:    ret{{[l|q]}} # encoding: [0xc3]926  %ext0 = extractelement <4 x float> %a0, i32 0927  %ext1 = extractelement <4 x float> %a1, i32 0928  %fdiv = fdiv float %ext0, %ext1929  %res = insertelement <4 x float> %a0, float %fdiv, i32 0930  ret <4 x float> %res931}932 933define i32 @test_MM_GET_EXCEPTION_MASK() nounwind {934; X86-SSE-LABEL: test_MM_GET_EXCEPTION_MASK:935; X86-SSE:       # %bb.0:936; X86-SSE-NEXT:    pushl %eax # encoding: [0x50]937; X86-SSE-NEXT:    movl %esp, %eax # encoding: [0x89,0xe0]938; X86-SSE-NEXT:    stmxcsr (%eax) # encoding: [0x0f,0xae,0x18]939; X86-SSE-NEXT:    movl (%esp), %eax # encoding: [0x8b,0x04,0x24]940; X86-SSE-NEXT:    andl $8064, %eax # encoding: [0x25,0x80,0x1f,0x00,0x00]941; X86-SSE-NEXT:    # imm = 0x1F80942; X86-SSE-NEXT:    popl %ecx # encoding: [0x59]943; X86-SSE-NEXT:    retl # encoding: [0xc3]944;945; X86-AVX-LABEL: test_MM_GET_EXCEPTION_MASK:946; X86-AVX:       # %bb.0:947; X86-AVX-NEXT:    pushl %eax # encoding: [0x50]948; X86-AVX-NEXT:    movl %esp, %eax # encoding: [0x89,0xe0]949; X86-AVX-NEXT:    vstmxcsr (%eax) # encoding: [0xc5,0xf8,0xae,0x18]950; X86-AVX-NEXT:    movl (%esp), %eax # encoding: [0x8b,0x04,0x24]951; X86-AVX-NEXT:    andl $8064, %eax # encoding: [0x25,0x80,0x1f,0x00,0x00]952; X86-AVX-NEXT:    # imm = 0x1F80953; X86-AVX-NEXT:    popl %ecx # encoding: [0x59]954; X86-AVX-NEXT:    retl # encoding: [0xc3]955;956; X64-SSE-LABEL: test_MM_GET_EXCEPTION_MASK:957; X64-SSE:       # %bb.0:958; X64-SSE-NEXT:    leaq -{{[0-9]+}}(%rsp), %rax # encoding: [0x48,0x8d,0x44,0x24,0xfc]959; X64-SSE-NEXT:    stmxcsr (%rax) # encoding: [0x0f,0xae,0x18]960; X64-SSE-NEXT:    movl -{{[0-9]+}}(%rsp), %eax # encoding: [0x8b,0x44,0x24,0xfc]961; X64-SSE-NEXT:    andl $8064, %eax # encoding: [0x25,0x80,0x1f,0x00,0x00]962; X64-SSE-NEXT:    # imm = 0x1F80963; X64-SSE-NEXT:    retq # encoding: [0xc3]964;965; X64-AVX-LABEL: test_MM_GET_EXCEPTION_MASK:966; X64-AVX:       # %bb.0:967; X64-AVX-NEXT:    leaq -{{[0-9]+}}(%rsp), %rax # encoding: [0x48,0x8d,0x44,0x24,0xfc]968; X64-AVX-NEXT:    vstmxcsr (%rax) # encoding: [0xc5,0xf8,0xae,0x18]969; X64-AVX-NEXT:    movl -{{[0-9]+}}(%rsp), %eax # encoding: [0x8b,0x44,0x24,0xfc]970; X64-AVX-NEXT:    andl $8064, %eax # encoding: [0x25,0x80,0x1f,0x00,0x00]971; X64-AVX-NEXT:    # imm = 0x1F80972; X64-AVX-NEXT:    retq # encoding: [0xc3]973  %1 = alloca i32, align 4974  %2 = bitcast ptr %1 to ptr975  call void @llvm.x86.sse.stmxcsr(ptr %2)976  %3 = load i32, ptr %1, align 4977  %4 = and i32 %3, 8064978  ret i32 %4979}980declare void @llvm.x86.sse.stmxcsr(ptr) nounwind readnone981 982define i32 @test_MM_GET_EXCEPTION_STATE() nounwind {983; X86-SSE-LABEL: test_MM_GET_EXCEPTION_STATE:984; X86-SSE:       # %bb.0:985; X86-SSE-NEXT:    pushl %eax # encoding: [0x50]986; X86-SSE-NEXT:    movl %esp, %eax # encoding: [0x89,0xe0]987; X86-SSE-NEXT:    stmxcsr (%eax) # encoding: [0x0f,0xae,0x18]988; X86-SSE-NEXT:    movl (%esp), %eax # encoding: [0x8b,0x04,0x24]989; X86-SSE-NEXT:    andl $63, %eax # encoding: [0x83,0xe0,0x3f]990; X86-SSE-NEXT:    popl %ecx # encoding: [0x59]991; X86-SSE-NEXT:    retl # encoding: [0xc3]992;993; X86-AVX-LABEL: test_MM_GET_EXCEPTION_STATE:994; X86-AVX:       # %bb.0:995; X86-AVX-NEXT:    pushl %eax # encoding: [0x50]996; X86-AVX-NEXT:    movl %esp, %eax # encoding: [0x89,0xe0]997; X86-AVX-NEXT:    vstmxcsr (%eax) # encoding: [0xc5,0xf8,0xae,0x18]998; X86-AVX-NEXT:    movl (%esp), %eax # encoding: [0x8b,0x04,0x24]999; X86-AVX-NEXT:    andl $63, %eax # encoding: [0x83,0xe0,0x3f]1000; X86-AVX-NEXT:    popl %ecx # encoding: [0x59]1001; X86-AVX-NEXT:    retl # encoding: [0xc3]1002;1003; X64-SSE-LABEL: test_MM_GET_EXCEPTION_STATE:1004; X64-SSE:       # %bb.0:1005; X64-SSE-NEXT:    leaq -{{[0-9]+}}(%rsp), %rax # encoding: [0x48,0x8d,0x44,0x24,0xfc]1006; X64-SSE-NEXT:    stmxcsr (%rax) # encoding: [0x0f,0xae,0x18]1007; X64-SSE-NEXT:    movl -{{[0-9]+}}(%rsp), %eax # encoding: [0x8b,0x44,0x24,0xfc]1008; X64-SSE-NEXT:    andl $63, %eax # encoding: [0x83,0xe0,0x3f]1009; X64-SSE-NEXT:    retq # encoding: [0xc3]1010;1011; X64-AVX-LABEL: test_MM_GET_EXCEPTION_STATE:1012; X64-AVX:       # %bb.0:1013; X64-AVX-NEXT:    leaq -{{[0-9]+}}(%rsp), %rax # encoding: [0x48,0x8d,0x44,0x24,0xfc]1014; X64-AVX-NEXT:    vstmxcsr (%rax) # encoding: [0xc5,0xf8,0xae,0x18]1015; X64-AVX-NEXT:    movl -{{[0-9]+}}(%rsp), %eax # encoding: [0x8b,0x44,0x24,0xfc]1016; X64-AVX-NEXT:    andl $63, %eax # encoding: [0x83,0xe0,0x3f]1017; X64-AVX-NEXT:    retq # encoding: [0xc3]1018  %1 = alloca i32, align 41019  %2 = bitcast ptr %1 to ptr1020  call void @llvm.x86.sse.stmxcsr(ptr %2)1021  %3 = load i32, ptr %1, align 41022  %4 = and i32 %3, 631023  ret i32 %41024}1025 1026define i32 @test_MM_GET_FLUSH_ZERO_MODE() nounwind {1027; X86-SSE-LABEL: test_MM_GET_FLUSH_ZERO_MODE:1028; X86-SSE:       # %bb.0:1029; X86-SSE-NEXT:    pushl %eax # encoding: [0x50]1030; X86-SSE-NEXT:    movl %esp, %eax # encoding: [0x89,0xe0]1031; X86-SSE-NEXT:    stmxcsr (%eax) # encoding: [0x0f,0xae,0x18]1032; X86-SSE-NEXT:    movl (%esp), %eax # encoding: [0x8b,0x04,0x24]1033; X86-SSE-NEXT:    andl $32768, %eax # encoding: [0x25,0x00,0x80,0x00,0x00]1034; X86-SSE-NEXT:    # imm = 0x80001035; X86-SSE-NEXT:    popl %ecx # encoding: [0x59]1036; X86-SSE-NEXT:    retl # encoding: [0xc3]1037;1038; X86-AVX-LABEL: test_MM_GET_FLUSH_ZERO_MODE:1039; X86-AVX:       # %bb.0:1040; X86-AVX-NEXT:    pushl %eax # encoding: [0x50]1041; X86-AVX-NEXT:    movl %esp, %eax # encoding: [0x89,0xe0]1042; X86-AVX-NEXT:    vstmxcsr (%eax) # encoding: [0xc5,0xf8,0xae,0x18]1043; X86-AVX-NEXT:    movl (%esp), %eax # encoding: [0x8b,0x04,0x24]1044; X86-AVX-NEXT:    andl $32768, %eax # encoding: [0x25,0x00,0x80,0x00,0x00]1045; X86-AVX-NEXT:    # imm = 0x80001046; X86-AVX-NEXT:    popl %ecx # encoding: [0x59]1047; X86-AVX-NEXT:    retl # encoding: [0xc3]1048;1049; X64-SSE-LABEL: test_MM_GET_FLUSH_ZERO_MODE:1050; X64-SSE:       # %bb.0:1051; X64-SSE-NEXT:    leaq -{{[0-9]+}}(%rsp), %rax # encoding: [0x48,0x8d,0x44,0x24,0xfc]1052; X64-SSE-NEXT:    stmxcsr (%rax) # encoding: [0x0f,0xae,0x18]1053; X64-SSE-NEXT:    movl -{{[0-9]+}}(%rsp), %eax # encoding: [0x8b,0x44,0x24,0xfc]1054; X64-SSE-NEXT:    andl $32768, %eax # encoding: [0x25,0x00,0x80,0x00,0x00]1055; X64-SSE-NEXT:    # imm = 0x80001056; X64-SSE-NEXT:    retq # encoding: [0xc3]1057;1058; X64-AVX-LABEL: test_MM_GET_FLUSH_ZERO_MODE:1059; X64-AVX:       # %bb.0:1060; X64-AVX-NEXT:    leaq -{{[0-9]+}}(%rsp), %rax # encoding: [0x48,0x8d,0x44,0x24,0xfc]1061; X64-AVX-NEXT:    vstmxcsr (%rax) # encoding: [0xc5,0xf8,0xae,0x18]1062; X64-AVX-NEXT:    movl -{{[0-9]+}}(%rsp), %eax # encoding: [0x8b,0x44,0x24,0xfc]1063; X64-AVX-NEXT:    andl $32768, %eax # encoding: [0x25,0x00,0x80,0x00,0x00]1064; X64-AVX-NEXT:    # imm = 0x80001065; X64-AVX-NEXT:    retq # encoding: [0xc3]1066  %1 = alloca i32, align 41067  %2 = bitcast ptr %1 to ptr1068  call void @llvm.x86.sse.stmxcsr(ptr %2)1069  %3 = load i32, ptr %1, align 41070  %4 = and i32 %3, 327681071  ret i32 %41072}1073 1074define i32 @test_MM_GET_ROUNDING_MODE() nounwind {1075; X86-SSE-LABEL: test_MM_GET_ROUNDING_MODE:1076; X86-SSE:       # %bb.0:1077; X86-SSE-NEXT:    pushl %eax # encoding: [0x50]1078; X86-SSE-NEXT:    movl %esp, %eax # encoding: [0x89,0xe0]1079; X86-SSE-NEXT:    stmxcsr (%eax) # encoding: [0x0f,0xae,0x18]1080; X86-SSE-NEXT:    movl (%esp), %eax # encoding: [0x8b,0x04,0x24]1081; X86-SSE-NEXT:    andl $24576, %eax # encoding: [0x25,0x00,0x60,0x00,0x00]1082; X86-SSE-NEXT:    # imm = 0x60001083; X86-SSE-NEXT:    popl %ecx # encoding: [0x59]1084; X86-SSE-NEXT:    retl # encoding: [0xc3]1085;1086; X86-AVX-LABEL: test_MM_GET_ROUNDING_MODE:1087; X86-AVX:       # %bb.0:1088; X86-AVX-NEXT:    pushl %eax # encoding: [0x50]1089; X86-AVX-NEXT:    movl %esp, %eax # encoding: [0x89,0xe0]1090; X86-AVX-NEXT:    vstmxcsr (%eax) # encoding: [0xc5,0xf8,0xae,0x18]1091; X86-AVX-NEXT:    movl (%esp), %eax # encoding: [0x8b,0x04,0x24]1092; X86-AVX-NEXT:    andl $24576, %eax # encoding: [0x25,0x00,0x60,0x00,0x00]1093; X86-AVX-NEXT:    # imm = 0x60001094; X86-AVX-NEXT:    popl %ecx # encoding: [0x59]1095; X86-AVX-NEXT:    retl # encoding: [0xc3]1096;1097; X64-SSE-LABEL: test_MM_GET_ROUNDING_MODE:1098; X64-SSE:       # %bb.0:1099; X64-SSE-NEXT:    leaq -{{[0-9]+}}(%rsp), %rax # encoding: [0x48,0x8d,0x44,0x24,0xfc]1100; X64-SSE-NEXT:    stmxcsr (%rax) # encoding: [0x0f,0xae,0x18]1101; X64-SSE-NEXT:    movl -{{[0-9]+}}(%rsp), %eax # encoding: [0x8b,0x44,0x24,0xfc]1102; X64-SSE-NEXT:    andl $24576, %eax # encoding: [0x25,0x00,0x60,0x00,0x00]1103; X64-SSE-NEXT:    # imm = 0x60001104; X64-SSE-NEXT:    retq # encoding: [0xc3]1105;1106; X64-AVX-LABEL: test_MM_GET_ROUNDING_MODE:1107; X64-AVX:       # %bb.0:1108; X64-AVX-NEXT:    leaq -{{[0-9]+}}(%rsp), %rax # encoding: [0x48,0x8d,0x44,0x24,0xfc]1109; X64-AVX-NEXT:    vstmxcsr (%rax) # encoding: [0xc5,0xf8,0xae,0x18]1110; X64-AVX-NEXT:    movl -{{[0-9]+}}(%rsp), %eax # encoding: [0x8b,0x44,0x24,0xfc]1111; X64-AVX-NEXT:    andl $24576, %eax # encoding: [0x25,0x00,0x60,0x00,0x00]1112; X64-AVX-NEXT:    # imm = 0x60001113; X64-AVX-NEXT:    retq # encoding: [0xc3]1114  %1 = alloca i32, align 41115  %2 = bitcast ptr %1 to ptr1116  call void @llvm.x86.sse.stmxcsr(ptr %2)1117  %3 = load i32, ptr %1, align 41118  %4 = and i32 %3, 245761119  ret i32 %41120}1121 1122define i32 @test_mm_getcsr() nounwind {1123; X86-SSE-LABEL: test_mm_getcsr:1124; X86-SSE:       # %bb.0:1125; X86-SSE-NEXT:    pushl %eax # encoding: [0x50]1126; X86-SSE-NEXT:    movl %esp, %eax # encoding: [0x89,0xe0]1127; X86-SSE-NEXT:    stmxcsr (%eax) # encoding: [0x0f,0xae,0x18]1128; X86-SSE-NEXT:    movl (%esp), %eax # encoding: [0x8b,0x04,0x24]1129; X86-SSE-NEXT:    popl %ecx # encoding: [0x59]1130; X86-SSE-NEXT:    retl # encoding: [0xc3]1131;1132; X86-AVX-LABEL: test_mm_getcsr:1133; X86-AVX:       # %bb.0:1134; X86-AVX-NEXT:    pushl %eax # encoding: [0x50]1135; X86-AVX-NEXT:    movl %esp, %eax # encoding: [0x89,0xe0]1136; X86-AVX-NEXT:    vstmxcsr (%eax) # encoding: [0xc5,0xf8,0xae,0x18]1137; X86-AVX-NEXT:    movl (%esp), %eax # encoding: [0x8b,0x04,0x24]1138; X86-AVX-NEXT:    popl %ecx # encoding: [0x59]1139; X86-AVX-NEXT:    retl # encoding: [0xc3]1140;1141; X64-SSE-LABEL: test_mm_getcsr:1142; X64-SSE:       # %bb.0:1143; X64-SSE-NEXT:    leaq -{{[0-9]+}}(%rsp), %rax # encoding: [0x48,0x8d,0x44,0x24,0xfc]1144; X64-SSE-NEXT:    stmxcsr (%rax) # encoding: [0x0f,0xae,0x18]1145; X64-SSE-NEXT:    movl -{{[0-9]+}}(%rsp), %eax # encoding: [0x8b,0x44,0x24,0xfc]1146; X64-SSE-NEXT:    retq # encoding: [0xc3]1147;1148; X64-AVX-LABEL: test_mm_getcsr:1149; X64-AVX:       # %bb.0:1150; X64-AVX-NEXT:    leaq -{{[0-9]+}}(%rsp), %rax # encoding: [0x48,0x8d,0x44,0x24,0xfc]1151; X64-AVX-NEXT:    vstmxcsr (%rax) # encoding: [0xc5,0xf8,0xae,0x18]1152; X64-AVX-NEXT:    movl -{{[0-9]+}}(%rsp), %eax # encoding: [0x8b,0x44,0x24,0xfc]1153; X64-AVX-NEXT:    retq # encoding: [0xc3]1154  %1 = alloca i32, align 41155  %2 = bitcast ptr %1 to ptr1156  call void @llvm.x86.sse.stmxcsr(ptr %2)1157  %3 = load i32, ptr %1, align 41158  ret i32 %31159}1160 1161define <4 x float> @test_mm_load_ps(ptr %a0) nounwind {1162; X86-SSE-LABEL: test_mm_load_ps:1163; X86-SSE:       # %bb.0:1164; X86-SSE-NEXT:    movl {{[0-9]+}}(%esp), %eax # encoding: [0x8b,0x44,0x24,0x04]1165; X86-SSE-NEXT:    movaps (%eax), %xmm0 # encoding: [0x0f,0x28,0x00]1166; X86-SSE-NEXT:    retl # encoding: [0xc3]1167;1168; X86-AVX1-LABEL: test_mm_load_ps:1169; X86-AVX1:       # %bb.0:1170; X86-AVX1-NEXT:    movl {{[0-9]+}}(%esp), %eax # encoding: [0x8b,0x44,0x24,0x04]1171; X86-AVX1-NEXT:    vmovaps (%eax), %xmm0 # encoding: [0xc5,0xf8,0x28,0x00]1172; X86-AVX1-NEXT:    retl # encoding: [0xc3]1173;1174; X86-AVX512-LABEL: test_mm_load_ps:1175; X86-AVX512:       # %bb.0:1176; X86-AVX512-NEXT:    movl {{[0-9]+}}(%esp), %eax # encoding: [0x8b,0x44,0x24,0x04]1177; X86-AVX512-NEXT:    vmovaps (%eax), %xmm0 # EVEX TO VEX Compression encoding: [0xc5,0xf8,0x28,0x00]1178; X86-AVX512-NEXT:    retl # encoding: [0xc3]1179;1180; X64-SSE-LABEL: test_mm_load_ps:1181; X64-SSE:       # %bb.0:1182; X64-SSE-NEXT:    movaps (%rdi), %xmm0 # encoding: [0x0f,0x28,0x07]1183; X64-SSE-NEXT:    retq # encoding: [0xc3]1184;1185; X64-AVX1-LABEL: test_mm_load_ps:1186; X64-AVX1:       # %bb.0:1187; X64-AVX1-NEXT:    vmovaps (%rdi), %xmm0 # encoding: [0xc5,0xf8,0x28,0x07]1188; X64-AVX1-NEXT:    retq # encoding: [0xc3]1189;1190; X64-AVX512-LABEL: test_mm_load_ps:1191; X64-AVX512:       # %bb.0:1192; X64-AVX512-NEXT:    vmovaps (%rdi), %xmm0 # EVEX TO VEX Compression encoding: [0xc5,0xf8,0x28,0x07]1193; X64-AVX512-NEXT:    retq # encoding: [0xc3]1194  %arg0 = bitcast ptr %a0 to ptr1195  %res = load <4 x float>, ptr %arg0, align 161196  ret <4 x float> %res1197}1198 1199define <4 x float> @test_mm_load_ps1(ptr %a0) nounwind {1200; X86-SSE-LABEL: test_mm_load_ps1:1201; X86-SSE:       # %bb.0:1202; X86-SSE-NEXT:    movl {{[0-9]+}}(%esp), %eax # encoding: [0x8b,0x44,0x24,0x04]1203; X86-SSE-NEXT:    movss {{.*#+}} xmm0 = mem[0],zero,zero,zero1204; X86-SSE-NEXT:    # encoding: [0xf3,0x0f,0x10,0x00]1205; X86-SSE-NEXT:    shufps $0, %xmm0, %xmm0 # encoding: [0x0f,0xc6,0xc0,0x00]1206; X86-SSE-NEXT:    # xmm0 = xmm0[0,0,0,0]1207; X86-SSE-NEXT:    retl # encoding: [0xc3]1208;1209; X86-AVX1-LABEL: test_mm_load_ps1:1210; X86-AVX1:       # %bb.0:1211; X86-AVX1-NEXT:    movl {{[0-9]+}}(%esp), %eax # encoding: [0x8b,0x44,0x24,0x04]1212; X86-AVX1-NEXT:    vbroadcastss (%eax), %xmm0 # encoding: [0xc4,0xe2,0x79,0x18,0x00]1213; X86-AVX1-NEXT:    retl # encoding: [0xc3]1214;1215; X86-AVX512-LABEL: test_mm_load_ps1:1216; X86-AVX512:       # %bb.0:1217; X86-AVX512-NEXT:    movl {{[0-9]+}}(%esp), %eax # encoding: [0x8b,0x44,0x24,0x04]1218; X86-AVX512-NEXT:    vbroadcastss (%eax), %xmm0 # EVEX TO VEX Compression encoding: [0xc4,0xe2,0x79,0x18,0x00]1219; X86-AVX512-NEXT:    retl # encoding: [0xc3]1220;1221; X64-SSE-LABEL: test_mm_load_ps1:1222; X64-SSE:       # %bb.0:1223; X64-SSE-NEXT:    movss {{.*#+}} xmm0 = mem[0],zero,zero,zero1224; X64-SSE-NEXT:    # encoding: [0xf3,0x0f,0x10,0x07]1225; X64-SSE-NEXT:    shufps $0, %xmm0, %xmm0 # encoding: [0x0f,0xc6,0xc0,0x00]1226; X64-SSE-NEXT:    # xmm0 = xmm0[0,0,0,0]1227; X64-SSE-NEXT:    retq # encoding: [0xc3]1228;1229; X64-AVX1-LABEL: test_mm_load_ps1:1230; X64-AVX1:       # %bb.0:1231; X64-AVX1-NEXT:    vbroadcastss (%rdi), %xmm0 # encoding: [0xc4,0xe2,0x79,0x18,0x07]1232; X64-AVX1-NEXT:    retq # encoding: [0xc3]1233;1234; X64-AVX512-LABEL: test_mm_load_ps1:1235; X64-AVX512:       # %bb.0:1236; X64-AVX512-NEXT:    vbroadcastss (%rdi), %xmm0 # EVEX TO VEX Compression encoding: [0xc4,0xe2,0x79,0x18,0x07]1237; X64-AVX512-NEXT:    retq # encoding: [0xc3]1238  %ld = load float, ptr %a0, align 41239  %res0 = insertelement <4 x float> undef, float %ld, i32 01240  %res1 = insertelement <4 x float> %res0, float %ld, i32 11241  %res2 = insertelement <4 x float> %res1, float %ld, i32 21242  %res3 = insertelement <4 x float> %res2, float %ld, i32 31243  ret <4 x float> %res31244}1245 1246define <4 x float> @test_mm_load_ss(ptr %a0) nounwind {1247; X86-SSE-LABEL: test_mm_load_ss:1248; X86-SSE:       # %bb.0:1249; X86-SSE-NEXT:    movl {{[0-9]+}}(%esp), %eax # encoding: [0x8b,0x44,0x24,0x04]1250; X86-SSE-NEXT:    movss {{.*#+}} xmm0 = mem[0],zero,zero,zero1251; X86-SSE-NEXT:    # encoding: [0xf3,0x0f,0x10,0x00]1252; X86-SSE-NEXT:    retl # encoding: [0xc3]1253;1254; X86-AVX1-LABEL: test_mm_load_ss:1255; X86-AVX1:       # %bb.0:1256; X86-AVX1-NEXT:    movl {{[0-9]+}}(%esp), %eax # encoding: [0x8b,0x44,0x24,0x04]1257; X86-AVX1-NEXT:    vmovss {{.*#+}} xmm0 = mem[0],zero,zero,zero1258; X86-AVX1-NEXT:    # encoding: [0xc5,0xfa,0x10,0x00]1259; X86-AVX1-NEXT:    retl # encoding: [0xc3]1260;1261; X86-AVX512-LABEL: test_mm_load_ss:1262; X86-AVX512:       # %bb.0:1263; X86-AVX512-NEXT:    movl {{[0-9]+}}(%esp), %eax # encoding: [0x8b,0x44,0x24,0x04]1264; X86-AVX512-NEXT:    vmovss {{.*#+}} xmm0 = mem[0],zero,zero,zero1265; X86-AVX512-NEXT:    # EVEX TO VEX Compression encoding: [0xc5,0xfa,0x10,0x00]1266; X86-AVX512-NEXT:    retl # encoding: [0xc3]1267;1268; X64-SSE-LABEL: test_mm_load_ss:1269; X64-SSE:       # %bb.0:1270; X64-SSE-NEXT:    movss {{.*#+}} xmm0 = mem[0],zero,zero,zero1271; X64-SSE-NEXT:    # encoding: [0xf3,0x0f,0x10,0x07]1272; X64-SSE-NEXT:    retq # encoding: [0xc3]1273;1274; X64-AVX1-LABEL: test_mm_load_ss:1275; X64-AVX1:       # %bb.0:1276; X64-AVX1-NEXT:    vmovss {{.*#+}} xmm0 = mem[0],zero,zero,zero1277; X64-AVX1-NEXT:    # encoding: [0xc5,0xfa,0x10,0x07]1278; X64-AVX1-NEXT:    retq # encoding: [0xc3]1279;1280; X64-AVX512-LABEL: test_mm_load_ss:1281; X64-AVX512:       # %bb.0:1282; X64-AVX512-NEXT:    vmovss {{.*#+}} xmm0 = mem[0],zero,zero,zero1283; X64-AVX512-NEXT:    # EVEX TO VEX Compression encoding: [0xc5,0xfa,0x10,0x07]1284; X64-AVX512-NEXT:    retq # encoding: [0xc3]1285  %ld = load float, ptr %a0, align 11286  %res0 = insertelement <4 x float> undef, float %ld, i32 01287  %res1 = insertelement <4 x float> %res0, float 0.0, i32 11288  %res2 = insertelement <4 x float> %res1, float 0.0, i32 21289  %res3 = insertelement <4 x float> %res2, float 0.0, i32 31290  ret <4 x float> %res31291}1292 1293define <4 x float> @test_mm_load1_ps(ptr %a0) nounwind {1294; X86-SSE-LABEL: test_mm_load1_ps:1295; X86-SSE:       # %bb.0:1296; X86-SSE-NEXT:    movl {{[0-9]+}}(%esp), %eax # encoding: [0x8b,0x44,0x24,0x04]1297; X86-SSE-NEXT:    movss {{.*#+}} xmm0 = mem[0],zero,zero,zero1298; X86-SSE-NEXT:    # encoding: [0xf3,0x0f,0x10,0x00]1299; X86-SSE-NEXT:    shufps $0, %xmm0, %xmm0 # encoding: [0x0f,0xc6,0xc0,0x00]1300; X86-SSE-NEXT:    # xmm0 = xmm0[0,0,0,0]1301; X86-SSE-NEXT:    retl # encoding: [0xc3]1302;1303; X86-AVX1-LABEL: test_mm_load1_ps:1304; X86-AVX1:       # %bb.0:1305; X86-AVX1-NEXT:    movl {{[0-9]+}}(%esp), %eax # encoding: [0x8b,0x44,0x24,0x04]1306; X86-AVX1-NEXT:    vbroadcastss (%eax), %xmm0 # encoding: [0xc4,0xe2,0x79,0x18,0x00]1307; X86-AVX1-NEXT:    retl # encoding: [0xc3]1308;1309; X86-AVX512-LABEL: test_mm_load1_ps:1310; X86-AVX512:       # %bb.0:1311; X86-AVX512-NEXT:    movl {{[0-9]+}}(%esp), %eax # encoding: [0x8b,0x44,0x24,0x04]1312; X86-AVX512-NEXT:    vbroadcastss (%eax), %xmm0 # EVEX TO VEX Compression encoding: [0xc4,0xe2,0x79,0x18,0x00]1313; X86-AVX512-NEXT:    retl # encoding: [0xc3]1314;1315; X64-SSE-LABEL: test_mm_load1_ps:1316; X64-SSE:       # %bb.0:1317; X64-SSE-NEXT:    movss {{.*#+}} xmm0 = mem[0],zero,zero,zero1318; X64-SSE-NEXT:    # encoding: [0xf3,0x0f,0x10,0x07]1319; X64-SSE-NEXT:    shufps $0, %xmm0, %xmm0 # encoding: [0x0f,0xc6,0xc0,0x00]1320; X64-SSE-NEXT:    # xmm0 = xmm0[0,0,0,0]1321; X64-SSE-NEXT:    retq # encoding: [0xc3]1322;1323; X64-AVX1-LABEL: test_mm_load1_ps:1324; X64-AVX1:       # %bb.0:1325; X64-AVX1-NEXT:    vbroadcastss (%rdi), %xmm0 # encoding: [0xc4,0xe2,0x79,0x18,0x07]1326; X64-AVX1-NEXT:    retq # encoding: [0xc3]1327;1328; X64-AVX512-LABEL: test_mm_load1_ps:1329; X64-AVX512:       # %bb.0:1330; X64-AVX512-NEXT:    vbroadcastss (%rdi), %xmm0 # EVEX TO VEX Compression encoding: [0xc4,0xe2,0x79,0x18,0x07]1331; X64-AVX512-NEXT:    retq # encoding: [0xc3]1332  %ld = load float, ptr %a0, align 41333  %res0 = insertelement <4 x float> undef, float %ld, i32 01334  %res1 = insertelement <4 x float> %res0, float %ld, i32 11335  %res2 = insertelement <4 x float> %res1, float %ld, i32 21336  %res3 = insertelement <4 x float> %res2, float %ld, i32 31337  ret <4 x float> %res31338}1339 1340define <4 x float> @test_mm_loadh_pi(<4 x float> %a0, ptr %a1) {1341; X86-SSE-LABEL: test_mm_loadh_pi:1342; X86-SSE:       # %bb.0:1343; X86-SSE-NEXT:    movl {{[0-9]+}}(%esp), %eax # encoding: [0x8b,0x44,0x24,0x04]1344; X86-SSE-NEXT:    movhps (%eax), %xmm0 # encoding: [0x0f,0x16,0x00]1345; X86-SSE-NEXT:    # xmm0 = xmm0[0,1],mem[0,1]1346; X86-SSE-NEXT:    retl # encoding: [0xc3]1347;1348; X86-AVX1-LABEL: test_mm_loadh_pi:1349; X86-AVX1:       # %bb.0:1350; X86-AVX1-NEXT:    movl {{[0-9]+}}(%esp), %eax # encoding: [0x8b,0x44,0x24,0x04]1351; X86-AVX1-NEXT:    vmovhps (%eax), %xmm0, %xmm0 # encoding: [0xc5,0xf8,0x16,0x00]1352; X86-AVX1-NEXT:    # xmm0 = xmm0[0,1],mem[0,1]1353; X86-AVX1-NEXT:    retl # encoding: [0xc3]1354;1355; X86-AVX512-LABEL: test_mm_loadh_pi:1356; X86-AVX512:       # %bb.0:1357; X86-AVX512-NEXT:    movl {{[0-9]+}}(%esp), %eax # encoding: [0x8b,0x44,0x24,0x04]1358; X86-AVX512-NEXT:    vmovhps (%eax), %xmm0, %xmm0 # EVEX TO VEX Compression encoding: [0xc5,0xf8,0x16,0x00]1359; X86-AVX512-NEXT:    # xmm0 = xmm0[0,1],mem[0,1]1360; X86-AVX512-NEXT:    retl # encoding: [0xc3]1361;1362; X64-SSE-LABEL: test_mm_loadh_pi:1363; X64-SSE:       # %bb.0:1364; X64-SSE-NEXT:    movhps (%rdi), %xmm0 # encoding: [0x0f,0x16,0x07]1365; X64-SSE-NEXT:    # xmm0 = xmm0[0,1],mem[0,1]1366; X64-SSE-NEXT:    retq # encoding: [0xc3]1367;1368; X64-AVX1-LABEL: test_mm_loadh_pi:1369; X64-AVX1:       # %bb.0:1370; X64-AVX1-NEXT:    vmovhps (%rdi), %xmm0, %xmm0 # encoding: [0xc5,0xf8,0x16,0x07]1371; X64-AVX1-NEXT:    # xmm0 = xmm0[0,1],mem[0,1]1372; X64-AVX1-NEXT:    retq # encoding: [0xc3]1373;1374; X64-AVX512-LABEL: test_mm_loadh_pi:1375; X64-AVX512:       # %bb.0:1376; X64-AVX512-NEXT:    vmovhps (%rdi), %xmm0, %xmm0 # EVEX TO VEX Compression encoding: [0xc5,0xf8,0x16,0x07]1377; X64-AVX512-NEXT:    # xmm0 = xmm0[0,1],mem[0,1]1378; X64-AVX512-NEXT:    retq # encoding: [0xc3]1379  %ptr = bitcast ptr %a1 to ptr1380  %ld  = load <2 x float>, ptr %ptr1381  %ext = shufflevector <2 x float> %ld, <2 x float> undef, <4 x i32> <i32 0, i32 1, i32 undef, i32 undef>1382  %res = shufflevector <4 x float> %a0, <4 x float> %ext, <4 x i32> <i32 0, i32 1, i32 4, i32 5>1383  ret <4 x float> %res1384}1385 1386define <4 x float> @test_mm_loadl_pi(<4 x float> %a0, ptr %a1) {1387; X86-SSE-LABEL: test_mm_loadl_pi:1388; X86-SSE:       # %bb.0:1389; X86-SSE-NEXT:    movl {{[0-9]+}}(%esp), %eax # encoding: [0x8b,0x44,0x24,0x04]1390; X86-SSE-NEXT:    movlps (%eax), %xmm0 # encoding: [0x0f,0x12,0x00]1391; X86-SSE-NEXT:    # xmm0 = mem[0,1],xmm0[2,3]1392; X86-SSE-NEXT:    retl # encoding: [0xc3]1393;1394; X86-AVX1-LABEL: test_mm_loadl_pi:1395; X86-AVX1:       # %bb.0:1396; X86-AVX1-NEXT:    movl {{[0-9]+}}(%esp), %eax # encoding: [0x8b,0x44,0x24,0x04]1397; X86-AVX1-NEXT:    vmovlps (%eax), %xmm0, %xmm0 # encoding: [0xc5,0xf8,0x12,0x00]1398; X86-AVX1-NEXT:    # xmm0 = mem[0,1],xmm0[2,3]1399; X86-AVX1-NEXT:    retl # encoding: [0xc3]1400;1401; X86-AVX512-LABEL: test_mm_loadl_pi:1402; X86-AVX512:       # %bb.0:1403; X86-AVX512-NEXT:    movl {{[0-9]+}}(%esp), %eax # encoding: [0x8b,0x44,0x24,0x04]1404; X86-AVX512-NEXT:    vmovlps (%eax), %xmm0, %xmm0 # EVEX TO VEX Compression encoding: [0xc5,0xf8,0x12,0x00]1405; X86-AVX512-NEXT:    # xmm0 = mem[0,1],xmm0[2,3]1406; X86-AVX512-NEXT:    retl # encoding: [0xc3]1407;1408; X64-SSE-LABEL: test_mm_loadl_pi:1409; X64-SSE:       # %bb.0:1410; X64-SSE-NEXT:    movlps (%rdi), %xmm0 # encoding: [0x0f,0x12,0x07]1411; X64-SSE-NEXT:    # xmm0 = mem[0,1],xmm0[2,3]1412; X64-SSE-NEXT:    retq # encoding: [0xc3]1413;1414; X64-AVX1-LABEL: test_mm_loadl_pi:1415; X64-AVX1:       # %bb.0:1416; X64-AVX1-NEXT:    vmovlps (%rdi), %xmm0, %xmm0 # encoding: [0xc5,0xf8,0x12,0x07]1417; X64-AVX1-NEXT:    # xmm0 = mem[0,1],xmm0[2,3]1418; X64-AVX1-NEXT:    retq # encoding: [0xc3]1419;1420; X64-AVX512-LABEL: test_mm_loadl_pi:1421; X64-AVX512:       # %bb.0:1422; X64-AVX512-NEXT:    vmovlps (%rdi), %xmm0, %xmm0 # EVEX TO VEX Compression encoding: [0xc5,0xf8,0x12,0x07]1423; X64-AVX512-NEXT:    # xmm0 = mem[0,1],xmm0[2,3]1424; X64-AVX512-NEXT:    retq # encoding: [0xc3]1425  %ptr = bitcast ptr %a1 to ptr1426  %ld  = load <2 x float>, ptr %ptr1427  %ext = shufflevector <2 x float> %ld, <2 x float> undef, <4 x i32> <i32 0, i32 1, i32 undef, i32 undef>1428  %res = shufflevector <4 x float> %a0, <4 x float> %ext, <4 x i32> <i32 4, i32 5, i32 2, i32 3>1429  ret <4 x float> %res1430}1431 1432define <4 x float> @test_mm_loadr_ps(ptr %a0) nounwind {1433; X86-SSE-LABEL: test_mm_loadr_ps:1434; X86-SSE:       # %bb.0:1435; X86-SSE-NEXT:    movl {{[0-9]+}}(%esp), %eax # encoding: [0x8b,0x44,0x24,0x04]1436; X86-SSE-NEXT:    movaps (%eax), %xmm0 # encoding: [0x0f,0x28,0x00]1437; X86-SSE-NEXT:    shufps $27, %xmm0, %xmm0 # encoding: [0x0f,0xc6,0xc0,0x1b]1438; X86-SSE-NEXT:    # xmm0 = xmm0[3,2,1,0]1439; X86-SSE-NEXT:    retl # encoding: [0xc3]1440;1441; X86-AVX1-LABEL: test_mm_loadr_ps:1442; X86-AVX1:       # %bb.0:1443; X86-AVX1-NEXT:    movl {{[0-9]+}}(%esp), %eax # encoding: [0x8b,0x44,0x24,0x04]1444; X86-AVX1-NEXT:    vpermilps $27, (%eax), %xmm0 # encoding: [0xc4,0xe3,0x79,0x04,0x00,0x1b]1445; X86-AVX1-NEXT:    # xmm0 = mem[3,2,1,0]1446; X86-AVX1-NEXT:    retl # encoding: [0xc3]1447;1448; X86-AVX512-LABEL: test_mm_loadr_ps:1449; X86-AVX512:       # %bb.0:1450; X86-AVX512-NEXT:    movl {{[0-9]+}}(%esp), %eax # encoding: [0x8b,0x44,0x24,0x04]1451; X86-AVX512-NEXT:    vpermilps $27, (%eax), %xmm0 # EVEX TO VEX Compression encoding: [0xc4,0xe3,0x79,0x04,0x00,0x1b]1452; X86-AVX512-NEXT:    # xmm0 = mem[3,2,1,0]1453; X86-AVX512-NEXT:    retl # encoding: [0xc3]1454;1455; X64-SSE-LABEL: test_mm_loadr_ps:1456; X64-SSE:       # %bb.0:1457; X64-SSE-NEXT:    movaps (%rdi), %xmm0 # encoding: [0x0f,0x28,0x07]1458; X64-SSE-NEXT:    shufps $27, %xmm0, %xmm0 # encoding: [0x0f,0xc6,0xc0,0x1b]1459; X64-SSE-NEXT:    # xmm0 = xmm0[3,2,1,0]1460; X64-SSE-NEXT:    retq # encoding: [0xc3]1461;1462; X64-AVX1-LABEL: test_mm_loadr_ps:1463; X64-AVX1:       # %bb.0:1464; X64-AVX1-NEXT:    vpermilps $27, (%rdi), %xmm0 # encoding: [0xc4,0xe3,0x79,0x04,0x07,0x1b]1465; X64-AVX1-NEXT:    # xmm0 = mem[3,2,1,0]1466; X64-AVX1-NEXT:    retq # encoding: [0xc3]1467;1468; X64-AVX512-LABEL: test_mm_loadr_ps:1469; X64-AVX512:       # %bb.0:1470; X64-AVX512-NEXT:    vpermilps $27, (%rdi), %xmm0 # EVEX TO VEX Compression encoding: [0xc4,0xe3,0x79,0x04,0x07,0x1b]1471; X64-AVX512-NEXT:    # xmm0 = mem[3,2,1,0]1472; X64-AVX512-NEXT:    retq # encoding: [0xc3]1473  %arg0 = bitcast ptr %a0 to ptr1474  %ld = load <4 x float>, ptr %arg0, align 161475  %res = shufflevector <4 x float> %ld, <4 x float> undef, <4 x i32> <i32 3, i32 2, i32 1, i32 0>1476  ret <4 x float> %res1477}1478 1479define <4 x float> @test_mm_loadu_ps(ptr %a0) nounwind {1480; X86-SSE-LABEL: test_mm_loadu_ps:1481; X86-SSE:       # %bb.0:1482; X86-SSE-NEXT:    movl {{[0-9]+}}(%esp), %eax # encoding: [0x8b,0x44,0x24,0x04]1483; X86-SSE-NEXT:    movups (%eax), %xmm0 # encoding: [0x0f,0x10,0x00]1484; X86-SSE-NEXT:    retl # encoding: [0xc3]1485;1486; X86-AVX1-LABEL: test_mm_loadu_ps:1487; X86-AVX1:       # %bb.0:1488; X86-AVX1-NEXT:    movl {{[0-9]+}}(%esp), %eax # encoding: [0x8b,0x44,0x24,0x04]1489; X86-AVX1-NEXT:    vmovups (%eax), %xmm0 # encoding: [0xc5,0xf8,0x10,0x00]1490; X86-AVX1-NEXT:    retl # encoding: [0xc3]1491;1492; X86-AVX512-LABEL: test_mm_loadu_ps:1493; X86-AVX512:       # %bb.0:1494; X86-AVX512-NEXT:    movl {{[0-9]+}}(%esp), %eax # encoding: [0x8b,0x44,0x24,0x04]1495; X86-AVX512-NEXT:    vmovups (%eax), %xmm0 # EVEX TO VEX Compression encoding: [0xc5,0xf8,0x10,0x00]1496; X86-AVX512-NEXT:    retl # encoding: [0xc3]1497;1498; X64-SSE-LABEL: test_mm_loadu_ps:1499; X64-SSE:       # %bb.0:1500; X64-SSE-NEXT:    movups (%rdi), %xmm0 # encoding: [0x0f,0x10,0x07]1501; X64-SSE-NEXT:    retq # encoding: [0xc3]1502;1503; X64-AVX1-LABEL: test_mm_loadu_ps:1504; X64-AVX1:       # %bb.0:1505; X64-AVX1-NEXT:    vmovups (%rdi), %xmm0 # encoding: [0xc5,0xf8,0x10,0x07]1506; X64-AVX1-NEXT:    retq # encoding: [0xc3]1507;1508; X64-AVX512-LABEL: test_mm_loadu_ps:1509; X64-AVX512:       # %bb.0:1510; X64-AVX512-NEXT:    vmovups (%rdi), %xmm0 # EVEX TO VEX Compression encoding: [0xc5,0xf8,0x10,0x07]1511; X64-AVX512-NEXT:    retq # encoding: [0xc3]1512  %arg0 = bitcast ptr %a0 to ptr1513  %res = load <4 x float>, ptr %arg0, align 11514  ret <4 x float> %res1515}1516 1517define <4 x float> @test_mm_max_ps(<4 x float> %a0, <4 x float> %a1) {1518; SSE-LABEL: test_mm_max_ps:1519; SSE:       # %bb.0:1520; SSE-NEXT:    maxps %xmm1, %xmm0 # encoding: [0x0f,0x5f,0xc1]1521; SSE-NEXT:    ret{{[l|q]}} # encoding: [0xc3]1522;1523; AVX1-LABEL: test_mm_max_ps:1524; AVX1:       # %bb.0:1525; AVX1-NEXT:    vmaxps %xmm1, %xmm0, %xmm0 # encoding: [0xc5,0xf8,0x5f,0xc1]1526; AVX1-NEXT:    ret{{[l|q]}} # encoding: [0xc3]1527;1528; AVX512-LABEL: test_mm_max_ps:1529; AVX512:       # %bb.0:1530; AVX512-NEXT:    vmaxps %xmm1, %xmm0, %xmm0 # EVEX TO VEX Compression encoding: [0xc5,0xf8,0x5f,0xc1]1531; AVX512-NEXT:    ret{{[l|q]}} # encoding: [0xc3]1532  %res = call <4 x float> @llvm.x86.sse.max.ps(<4 x float> %a0, <4 x float> %a1)1533  ret <4 x float> %res1534}1535declare <4 x float> @llvm.x86.sse.max.ps(<4 x float>, <4 x float>) nounwind readnone1536 1537define <4 x float> @test_mm_max_ss(<4 x float> %a0, <4 x float> %a1) {1538; SSE-LABEL: test_mm_max_ss:1539; SSE:       # %bb.0:1540; SSE-NEXT:    maxss %xmm1, %xmm0 # encoding: [0xf3,0x0f,0x5f,0xc1]1541; SSE-NEXT:    ret{{[l|q]}} # encoding: [0xc3]1542;1543; AVX1-LABEL: test_mm_max_ss:1544; AVX1:       # %bb.0:1545; AVX1-NEXT:    vmaxss %xmm1, %xmm0, %xmm0 # encoding: [0xc5,0xfa,0x5f,0xc1]1546; AVX1-NEXT:    ret{{[l|q]}} # encoding: [0xc3]1547;1548; AVX512-LABEL: test_mm_max_ss:1549; AVX512:       # %bb.0:1550; AVX512-NEXT:    vmaxss %xmm1, %xmm0, %xmm0 # EVEX TO VEX Compression encoding: [0xc5,0xfa,0x5f,0xc1]1551; AVX512-NEXT:    ret{{[l|q]}} # encoding: [0xc3]1552  %res = call <4 x float> @llvm.x86.sse.max.ss(<4 x float> %a0, <4 x float> %a1)1553  ret <4 x float> %res1554}1555declare <4 x float> @llvm.x86.sse.max.ss(<4 x float>, <4 x float>) nounwind readnone1556 1557define <4 x float> @test_mm_min_ps(<4 x float> %a0, <4 x float> %a1) {1558; SSE-LABEL: test_mm_min_ps:1559; SSE:       # %bb.0:1560; SSE-NEXT:    minps %xmm1, %xmm0 # encoding: [0x0f,0x5d,0xc1]1561; SSE-NEXT:    ret{{[l|q]}} # encoding: [0xc3]1562;1563; AVX1-LABEL: test_mm_min_ps:1564; AVX1:       # %bb.0:1565; AVX1-NEXT:    vminps %xmm1, %xmm0, %xmm0 # encoding: [0xc5,0xf8,0x5d,0xc1]1566; AVX1-NEXT:    ret{{[l|q]}} # encoding: [0xc3]1567;1568; AVX512-LABEL: test_mm_min_ps:1569; AVX512:       # %bb.0:1570; AVX512-NEXT:    vminps %xmm1, %xmm0, %xmm0 # EVEX TO VEX Compression encoding: [0xc5,0xf8,0x5d,0xc1]1571; AVX512-NEXT:    ret{{[l|q]}} # encoding: [0xc3]1572  %res = call <4 x float> @llvm.x86.sse.min.ps(<4 x float> %a0, <4 x float> %a1)1573  ret <4 x float> %res1574}1575declare <4 x float> @llvm.x86.sse.min.ps(<4 x float>, <4 x float>) nounwind readnone1576 1577define <4 x float> @test_mm_min_ss(<4 x float> %a0, <4 x float> %a1) {1578; SSE-LABEL: test_mm_min_ss:1579; SSE:       # %bb.0:1580; SSE-NEXT:    minss %xmm1, %xmm0 # encoding: [0xf3,0x0f,0x5d,0xc1]1581; SSE-NEXT:    ret{{[l|q]}} # encoding: [0xc3]1582;1583; AVX1-LABEL: test_mm_min_ss:1584; AVX1:       # %bb.0:1585; AVX1-NEXT:    vminss %xmm1, %xmm0, %xmm0 # encoding: [0xc5,0xfa,0x5d,0xc1]1586; AVX1-NEXT:    ret{{[l|q]}} # encoding: [0xc3]1587;1588; AVX512-LABEL: test_mm_min_ss:1589; AVX512:       # %bb.0:1590; AVX512-NEXT:    vminss %xmm1, %xmm0, %xmm0 # EVEX TO VEX Compression encoding: [0xc5,0xfa,0x5d,0xc1]1591; AVX512-NEXT:    ret{{[l|q]}} # encoding: [0xc3]1592  %res = call <4 x float> @llvm.x86.sse.min.ss(<4 x float> %a0, <4 x float> %a1)1593  ret <4 x float> %res1594}1595declare <4 x float> @llvm.x86.sse.min.ss(<4 x float>, <4 x float>) nounwind readnone1596 1597define <4 x float> @test_mm_move_ss(<4 x float> %a0, <4 x float> %a1) {1598; SSE-LABEL: test_mm_move_ss:1599; SSE:       # %bb.0:1600; SSE-NEXT:    movss %xmm1, %xmm0 # encoding: [0xf3,0x0f,0x10,0xc1]1601; SSE-NEXT:    # xmm0 = xmm1[0],xmm0[1,2,3]1602; SSE-NEXT:    ret{{[l|q]}} # encoding: [0xc3]1603;1604; AVX-LABEL: test_mm_move_ss:1605; AVX:       # %bb.0:1606; AVX-NEXT:    vmovss %xmm1, %xmm0, %xmm0 # encoding: [0xc5,0xfa,0x10,0xc1]1607; AVX-NEXT:    # xmm0 = xmm1[0],xmm0[1,2,3]1608; AVX-NEXT:    ret{{[l|q]}} # encoding: [0xc3]1609  %res = shufflevector <4 x float> %a0, <4 x float> %a1, <4 x i32> <i32 4, i32 1, i32 2, i32 3>1610  ret <4 x float> %res1611}1612 1613define <4 x float> @test_mm_movehl_ps(<4 x float> %a0, <4 x float> %a1) {1614; SSE-LABEL: test_mm_movehl_ps:1615; SSE:       # %bb.0:1616; SSE-NEXT:    movhlps %xmm1, %xmm0 # encoding: [0x0f,0x12,0xc1]1617; SSE-NEXT:    # xmm0 = xmm1[1],xmm0[1]1618; SSE-NEXT:    ret{{[l|q]}} # encoding: [0xc3]1619;1620; AVX1-LABEL: test_mm_movehl_ps:1621; AVX1:       # %bb.0:1622; AVX1-NEXT:    vunpckhpd %xmm0, %xmm1, %xmm0 # encoding: [0xc5,0xf1,0x15,0xc0]1623; AVX1-NEXT:    # xmm0 = xmm1[1],xmm0[1]1624; AVX1-NEXT:    ret{{[l|q]}} # encoding: [0xc3]1625;1626; AVX512-LABEL: test_mm_movehl_ps:1627; AVX512:       # %bb.0:1628; AVX512-NEXT:    vunpckhpd %xmm0, %xmm1, %xmm0 # EVEX TO VEX Compression encoding: [0xc5,0xf1,0x15,0xc0]1629; AVX512-NEXT:    # xmm0 = xmm1[1],xmm0[1]1630; AVX512-NEXT:    ret{{[l|q]}} # encoding: [0xc3]1631  %res = shufflevector <4 x float> %a0, <4 x float> %a1, <4 x i32> <i32 6, i32 7, i32 2, i32 3>1632  ret <4 x float> %res1633}1634 1635define <4 x float> @test_mm_movelh_ps(<4 x float> %a0, <4 x float> %a1) {1636; SSE-LABEL: test_mm_movelh_ps:1637; SSE:       # %bb.0:1638; SSE-NEXT:    movlhps %xmm1, %xmm0 # encoding: [0x0f,0x16,0xc1]1639; SSE-NEXT:    # xmm0 = xmm0[0],xmm1[0]1640; SSE-NEXT:    ret{{[l|q]}} # encoding: [0xc3]1641;1642; AVX1-LABEL: test_mm_movelh_ps:1643; AVX1:       # %bb.0:1644; AVX1-NEXT:    vmovlhps %xmm1, %xmm0, %xmm0 # encoding: [0xc5,0xf8,0x16,0xc1]1645; AVX1-NEXT:    # xmm0 = xmm0[0],xmm1[0]1646; AVX1-NEXT:    ret{{[l|q]}} # encoding: [0xc3]1647;1648; AVX512-LABEL: test_mm_movelh_ps:1649; AVX512:       # %bb.0:1650; AVX512-NEXT:    vmovlhps %xmm1, %xmm0, %xmm0 # EVEX TO VEX Compression encoding: [0xc5,0xf8,0x16,0xc1]1651; AVX512-NEXT:    # xmm0 = xmm0[0],xmm1[0]1652; AVX512-NEXT:    ret{{[l|q]}} # encoding: [0xc3]1653  %res = shufflevector <4 x float> %a0, <4 x float> %a1, <4 x i32> <i32 0, i32 1, i32 4, i32 5>1654  ret <4 x float> %res1655}1656 1657define i32 @test_mm_movemask_ps(<4 x float> %a0) nounwind {1658; SSE-LABEL: test_mm_movemask_ps:1659; SSE:       # %bb.0:1660; SSE-NEXT:    movmskps %xmm0, %eax # encoding: [0x0f,0x50,0xc0]1661; SSE-NEXT:    ret{{[l|q]}} # encoding: [0xc3]1662;1663; AVX-LABEL: test_mm_movemask_ps:1664; AVX:       # %bb.0:1665; AVX-NEXT:    vmovmskps %xmm0, %eax # encoding: [0xc5,0xf8,0x50,0xc0]1666; AVX-NEXT:    ret{{[l|q]}} # encoding: [0xc3]1667  %res = call i32 @llvm.x86.sse.movmsk.ps(<4 x float> %a0)1668  ret i32 %res1669}1670declare i32 @llvm.x86.sse.movmsk.ps(<4 x float>) nounwind readnone1671 1672define <4 x float> @test_mm_mul_ps(<4 x float> %a0, <4 x float> %a1) nounwind {1673; SSE-LABEL: test_mm_mul_ps:1674; SSE:       # %bb.0:1675; SSE-NEXT:    mulps %xmm1, %xmm0 # encoding: [0x0f,0x59,0xc1]1676; SSE-NEXT:    ret{{[l|q]}} # encoding: [0xc3]1677;1678; AVX1-LABEL: test_mm_mul_ps:1679; AVX1:       # %bb.0:1680; AVX1-NEXT:    vmulps %xmm1, %xmm0, %xmm0 # encoding: [0xc5,0xf8,0x59,0xc1]1681; AVX1-NEXT:    ret{{[l|q]}} # encoding: [0xc3]1682;1683; AVX512-LABEL: test_mm_mul_ps:1684; AVX512:       # %bb.0:1685; AVX512-NEXT:    vmulps %xmm1, %xmm0, %xmm0 # EVEX TO VEX Compression encoding: [0xc5,0xf8,0x59,0xc1]1686; AVX512-NEXT:    ret{{[l|q]}} # encoding: [0xc3]1687  %res = fmul <4 x float> %a0, %a11688  ret <4 x float> %res1689}1690 1691define <4 x float> @test_mm_mul_ss(<4 x float> %a0, <4 x float> %a1) nounwind {1692; SSE-LABEL: test_mm_mul_ss:1693; SSE:       # %bb.0:1694; SSE-NEXT:    mulss %xmm1, %xmm0 # encoding: [0xf3,0x0f,0x59,0xc1]1695; SSE-NEXT:    ret{{[l|q]}} # encoding: [0xc3]1696;1697; AVX1-LABEL: test_mm_mul_ss:1698; AVX1:       # %bb.0:1699; AVX1-NEXT:    vmulss %xmm1, %xmm0, %xmm0 # encoding: [0xc5,0xfa,0x59,0xc1]1700; AVX1-NEXT:    ret{{[l|q]}} # encoding: [0xc3]1701;1702; AVX512-LABEL: test_mm_mul_ss:1703; AVX512:       # %bb.0:1704; AVX512-NEXT:    vmulss %xmm1, %xmm0, %xmm0 # EVEX TO VEX Compression encoding: [0xc5,0xfa,0x59,0xc1]1705; AVX512-NEXT:    ret{{[l|q]}} # encoding: [0xc3]1706  %ext0 = extractelement <4 x float> %a0, i32 01707  %ext1 = extractelement <4 x float> %a1, i32 01708  %fmul = fmul float %ext0, %ext11709  %res = insertelement <4 x float> %a0, float %fmul, i32 01710  ret <4 x float> %res1711}1712 1713define <4 x float> @test_mm_or_ps(<4 x float> %a0, <4 x float> %a1) nounwind {1714; SSE-LABEL: test_mm_or_ps:1715; SSE:       # %bb.0:1716; SSE-NEXT:    orps %xmm1, %xmm0 # encoding: [0x0f,0x56,0xc1]1717; SSE-NEXT:    ret{{[l|q]}} # encoding: [0xc3]1718;1719; AVX1-LABEL: test_mm_or_ps:1720; AVX1:       # %bb.0:1721; AVX1-NEXT:    vorps %xmm1, %xmm0, %xmm0 # encoding: [0xc5,0xf8,0x56,0xc1]1722; AVX1-NEXT:    ret{{[l|q]}} # encoding: [0xc3]1723;1724; AVX512-LABEL: test_mm_or_ps:1725; AVX512:       # %bb.0:1726; AVX512-NEXT:    vorps %xmm1, %xmm0, %xmm0 # EVEX TO VEX Compression encoding: [0xc5,0xf8,0x56,0xc1]1727; AVX512-NEXT:    ret{{[l|q]}} # encoding: [0xc3]1728  %arg0 = bitcast <4 x float> %a0 to <4 x i32>1729  %arg1 = bitcast <4 x float> %a1 to <4 x i32>1730  %res = or <4 x i32> %arg0, %arg11731  %bc = bitcast <4 x i32> %res to <4 x float>1732  ret <4 x float> %bc1733}1734 1735define void @test_mm_prefetch(ptr %a0) {1736; X86-LABEL: test_mm_prefetch:1737; X86:       # %bb.0:1738; X86-NEXT:    movl {{[0-9]+}}(%esp), %eax # encoding: [0x8b,0x44,0x24,0x04]1739; X86-NEXT:    prefetchnta (%eax) # encoding: [0x0f,0x18,0x00]1740; X86-NEXT:    retl # encoding: [0xc3]1741;1742; X64-LABEL: test_mm_prefetch:1743; X64:       # %bb.0:1744; X64-NEXT:    prefetchnta (%rdi) # encoding: [0x0f,0x18,0x07]1745; X64-NEXT:    retq # encoding: [0xc3]1746  call void @llvm.prefetch(ptr %a0, i32 0, i32 0, i32 1)1747  ret void1748}1749declare void @llvm.prefetch(ptr nocapture, i32, i32, i32) nounwind readnone1750 1751define <4 x float> @test_mm_rcp_ps(<4 x float> %a0) {1752; SSE-LABEL: test_mm_rcp_ps:1753; SSE:       # %bb.0:1754; SSE-NEXT:    rcpps %xmm0, %xmm0 # encoding: [0x0f,0x53,0xc0]1755; SSE-NEXT:    ret{{[l|q]}} # encoding: [0xc3]1756;1757; AVX-LABEL: test_mm_rcp_ps:1758; AVX:       # %bb.0:1759; AVX-NEXT:    vrcpps %xmm0, %xmm0 # encoding: [0xc5,0xf8,0x53,0xc0]1760; AVX-NEXT:    ret{{[l|q]}} # encoding: [0xc3]1761  %res = call <4 x float> @llvm.x86.sse.rcp.ps(<4 x float> %a0)1762  ret <4 x float> %res1763}1764declare <4 x float> @llvm.x86.sse.rcp.ps(<4 x float>) nounwind readnone1765 1766define <4 x float> @test_mm_rcp_ss(<4 x float> %a0) {1767; SSE-LABEL: test_mm_rcp_ss:1768; SSE:       # %bb.0:1769; SSE-NEXT:    rcpss %xmm0, %xmm0 # encoding: [0xf3,0x0f,0x53,0xc0]1770; SSE-NEXT:    ret{{[l|q]}} # encoding: [0xc3]1771;1772; AVX-LABEL: test_mm_rcp_ss:1773; AVX:       # %bb.0:1774; AVX-NEXT:    vrcpss %xmm0, %xmm0, %xmm0 # encoding: [0xc5,0xfa,0x53,0xc0]1775; AVX-NEXT:    ret{{[l|q]}} # encoding: [0xc3]1776  %rcp = call <4 x float> @llvm.x86.sse.rcp.ss(<4 x float> %a0)1777  ret <4 x float> %rcp1778}1779declare <4 x float> @llvm.x86.sse.rcp.ss(<4 x float>) nounwind readnone1780 1781define <4 x float> @test_mm_rsqrt_ps(<4 x float> %a0) {1782; SSE-LABEL: test_mm_rsqrt_ps:1783; SSE:       # %bb.0:1784; SSE-NEXT:    rsqrtps %xmm0, %xmm0 # encoding: [0x0f,0x52,0xc0]1785; SSE-NEXT:    ret{{[l|q]}} # encoding: [0xc3]1786;1787; AVX-LABEL: test_mm_rsqrt_ps:1788; AVX:       # %bb.0:1789; AVX-NEXT:    vrsqrtps %xmm0, %xmm0 # encoding: [0xc5,0xf8,0x52,0xc0]1790; AVX-NEXT:    ret{{[l|q]}} # encoding: [0xc3]1791  %res = call <4 x float> @llvm.x86.sse.rsqrt.ps(<4 x float> %a0)1792  ret <4 x float> %res1793}1794declare <4 x float> @llvm.x86.sse.rsqrt.ps(<4 x float>) nounwind readnone1795 1796define <4 x float> @test_mm_rsqrt_ss(<4 x float> %a0) {1797; SSE-LABEL: test_mm_rsqrt_ss:1798; SSE:       # %bb.0:1799; SSE-NEXT:    rsqrtss %xmm0, %xmm0 # encoding: [0xf3,0x0f,0x52,0xc0]1800; SSE-NEXT:    ret{{[l|q]}} # encoding: [0xc3]1801;1802; AVX-LABEL: test_mm_rsqrt_ss:1803; AVX:       # %bb.0:1804; AVX-NEXT:    vrsqrtss %xmm0, %xmm0, %xmm0 # encoding: [0xc5,0xfa,0x52,0xc0]1805; AVX-NEXT:    ret{{[l|q]}} # encoding: [0xc3]1806  %rsqrt = call <4 x float> @llvm.x86.sse.rsqrt.ss(<4 x float> %a0)1807  ret <4 x float> %rsqrt1808}1809declare <4 x float> @llvm.x86.sse.rsqrt.ss(<4 x float>) nounwind readnone1810 1811define void @test_MM_SET_EXCEPTION_MASK(i32 %a0) nounwind {1812; X86-SSE-LABEL: test_MM_SET_EXCEPTION_MASK:1813; X86-SSE:       # %bb.0:1814; X86-SSE-NEXT:    pushl %eax # encoding: [0x50]1815; X86-SSE-NEXT:    movl {{[0-9]+}}(%esp), %eax # encoding: [0x8b,0x44,0x24,0x08]1816; X86-SSE-NEXT:    movl %esp, %ecx # encoding: [0x89,0xe1]1817; X86-SSE-NEXT:    stmxcsr (%ecx) # encoding: [0x0f,0xae,0x19]1818; X86-SSE-NEXT:    movl (%esp), %edx # encoding: [0x8b,0x14,0x24]1819; X86-SSE-NEXT:    andl $-8065, %edx # encoding: [0x81,0xe2,0x7f,0xe0,0xff,0xff]1820; X86-SSE-NEXT:    # imm = 0xE07F1821; X86-SSE-NEXT:    orl %eax, %edx # encoding: [0x09,0xc2]1822; X86-SSE-NEXT:    movl %edx, (%esp) # encoding: [0x89,0x14,0x24]1823; X86-SSE-NEXT:    ldmxcsr (%ecx) # encoding: [0x0f,0xae,0x11]1824; X86-SSE-NEXT:    popl %eax # encoding: [0x58]1825; X86-SSE-NEXT:    retl # encoding: [0xc3]1826;1827; X86-AVX-LABEL: test_MM_SET_EXCEPTION_MASK:1828; X86-AVX:       # %bb.0:1829; X86-AVX-NEXT:    pushl %eax # encoding: [0x50]1830; X86-AVX-NEXT:    movl {{[0-9]+}}(%esp), %eax # encoding: [0x8b,0x44,0x24,0x08]1831; X86-AVX-NEXT:    movl %esp, %ecx # encoding: [0x89,0xe1]1832; X86-AVX-NEXT:    vstmxcsr (%ecx) # encoding: [0xc5,0xf8,0xae,0x19]1833; X86-AVX-NEXT:    movl (%esp), %edx # encoding: [0x8b,0x14,0x24]1834; X86-AVX-NEXT:    andl $-8065, %edx # encoding: [0x81,0xe2,0x7f,0xe0,0xff,0xff]1835; X86-AVX-NEXT:    # imm = 0xE07F1836; X86-AVX-NEXT:    orl %eax, %edx # encoding: [0x09,0xc2]1837; X86-AVX-NEXT:    movl %edx, (%esp) # encoding: [0x89,0x14,0x24]1838; X86-AVX-NEXT:    vldmxcsr (%ecx) # encoding: [0xc5,0xf8,0xae,0x11]1839; X86-AVX-NEXT:    popl %eax # encoding: [0x58]1840; X86-AVX-NEXT:    retl # encoding: [0xc3]1841;1842; X64-SSE-LABEL: test_MM_SET_EXCEPTION_MASK:1843; X64-SSE:       # %bb.0:1844; X64-SSE-NEXT:    leaq -{{[0-9]+}}(%rsp), %rax # encoding: [0x48,0x8d,0x44,0x24,0xfc]1845; X64-SSE-NEXT:    stmxcsr (%rax) # encoding: [0x0f,0xae,0x18]1846; X64-SSE-NEXT:    movl -{{[0-9]+}}(%rsp), %ecx # encoding: [0x8b,0x4c,0x24,0xfc]1847; X64-SSE-NEXT:    andl $-8065, %ecx # encoding: [0x81,0xe1,0x7f,0xe0,0xff,0xff]1848; X64-SSE-NEXT:    # imm = 0xE07F1849; X64-SSE-NEXT:    orl %edi, %ecx # encoding: [0x09,0xf9]1850; X64-SSE-NEXT:    movl %ecx, -{{[0-9]+}}(%rsp) # encoding: [0x89,0x4c,0x24,0xfc]1851; X64-SSE-NEXT:    ldmxcsr (%rax) # encoding: [0x0f,0xae,0x10]1852; X64-SSE-NEXT:    retq # encoding: [0xc3]1853;1854; X64-AVX-LABEL: test_MM_SET_EXCEPTION_MASK:1855; X64-AVX:       # %bb.0:1856; X64-AVX-NEXT:    leaq -{{[0-9]+}}(%rsp), %rax # encoding: [0x48,0x8d,0x44,0x24,0xfc]1857; X64-AVX-NEXT:    vstmxcsr (%rax) # encoding: [0xc5,0xf8,0xae,0x18]1858; X64-AVX-NEXT:    movl -{{[0-9]+}}(%rsp), %ecx # encoding: [0x8b,0x4c,0x24,0xfc]1859; X64-AVX-NEXT:    andl $-8065, %ecx # encoding: [0x81,0xe1,0x7f,0xe0,0xff,0xff]1860; X64-AVX-NEXT:    # imm = 0xE07F1861; X64-AVX-NEXT:    orl %edi, %ecx # encoding: [0x09,0xf9]1862; X64-AVX-NEXT:    movl %ecx, -{{[0-9]+}}(%rsp) # encoding: [0x89,0x4c,0x24,0xfc]1863; X64-AVX-NEXT:    vldmxcsr (%rax) # encoding: [0xc5,0xf8,0xae,0x10]1864; X64-AVX-NEXT:    retq # encoding: [0xc3]1865  %1 = alloca i32, align 41866  %2 = bitcast ptr %1 to ptr1867  call void @llvm.x86.sse.stmxcsr(ptr %2)1868  %3 = load i32, ptr %11869  %4 = and i32 %3, -80651870  %5 = or i32 %4, %a01871  store i32 %5, ptr %11872  call void @llvm.x86.sse.ldmxcsr(ptr %2)1873  ret void1874}1875declare void @llvm.x86.sse.ldmxcsr(ptr) nounwind readnone1876 1877define void @test_MM_SET_EXCEPTION_STATE(i32 %a0) nounwind {1878; X86-SSE-LABEL: test_MM_SET_EXCEPTION_STATE:1879; X86-SSE:       # %bb.0:1880; X86-SSE-NEXT:    pushl %eax # encoding: [0x50]1881; X86-SSE-NEXT:    movl {{[0-9]+}}(%esp), %eax # encoding: [0x8b,0x44,0x24,0x08]1882; X86-SSE-NEXT:    movl %esp, %ecx # encoding: [0x89,0xe1]1883; X86-SSE-NEXT:    stmxcsr (%ecx) # encoding: [0x0f,0xae,0x19]1884; X86-SSE-NEXT:    movl (%esp), %edx # encoding: [0x8b,0x14,0x24]1885; X86-SSE-NEXT:    andl $-64, %edx # encoding: [0x83,0xe2,0xc0]1886; X86-SSE-NEXT:    orl %eax, %edx # encoding: [0x09,0xc2]1887; X86-SSE-NEXT:    movl %edx, (%esp) # encoding: [0x89,0x14,0x24]1888; X86-SSE-NEXT:    ldmxcsr (%ecx) # encoding: [0x0f,0xae,0x11]1889; X86-SSE-NEXT:    popl %eax # encoding: [0x58]1890; X86-SSE-NEXT:    retl # encoding: [0xc3]1891;1892; X86-AVX-LABEL: test_MM_SET_EXCEPTION_STATE:1893; X86-AVX:       # %bb.0:1894; X86-AVX-NEXT:    pushl %eax # encoding: [0x50]1895; X86-AVX-NEXT:    movl {{[0-9]+}}(%esp), %eax # encoding: [0x8b,0x44,0x24,0x08]1896; X86-AVX-NEXT:    movl %esp, %ecx # encoding: [0x89,0xe1]1897; X86-AVX-NEXT:    vstmxcsr (%ecx) # encoding: [0xc5,0xf8,0xae,0x19]1898; X86-AVX-NEXT:    movl (%esp), %edx # encoding: [0x8b,0x14,0x24]1899; X86-AVX-NEXT:    andl $-64, %edx # encoding: [0x83,0xe2,0xc0]1900; X86-AVX-NEXT:    orl %eax, %edx # encoding: [0x09,0xc2]1901; X86-AVX-NEXT:    movl %edx, (%esp) # encoding: [0x89,0x14,0x24]1902; X86-AVX-NEXT:    vldmxcsr (%ecx) # encoding: [0xc5,0xf8,0xae,0x11]1903; X86-AVX-NEXT:    popl %eax # encoding: [0x58]1904; X86-AVX-NEXT:    retl # encoding: [0xc3]1905;1906; X64-SSE-LABEL: test_MM_SET_EXCEPTION_STATE:1907; X64-SSE:       # %bb.0:1908; X64-SSE-NEXT:    leaq -{{[0-9]+}}(%rsp), %rax # encoding: [0x48,0x8d,0x44,0x24,0xfc]1909; X64-SSE-NEXT:    stmxcsr (%rax) # encoding: [0x0f,0xae,0x18]1910; X64-SSE-NEXT:    movl -{{[0-9]+}}(%rsp), %ecx # encoding: [0x8b,0x4c,0x24,0xfc]1911; X64-SSE-NEXT:    andl $-64, %ecx # encoding: [0x83,0xe1,0xc0]1912; X64-SSE-NEXT:    orl %edi, %ecx # encoding: [0x09,0xf9]1913; X64-SSE-NEXT:    movl %ecx, -{{[0-9]+}}(%rsp) # encoding: [0x89,0x4c,0x24,0xfc]1914; X64-SSE-NEXT:    ldmxcsr (%rax) # encoding: [0x0f,0xae,0x10]1915; X64-SSE-NEXT:    retq # encoding: [0xc3]1916;1917; X64-AVX-LABEL: test_MM_SET_EXCEPTION_STATE:1918; X64-AVX:       # %bb.0:1919; X64-AVX-NEXT:    leaq -{{[0-9]+}}(%rsp), %rax # encoding: [0x48,0x8d,0x44,0x24,0xfc]1920; X64-AVX-NEXT:    vstmxcsr (%rax) # encoding: [0xc5,0xf8,0xae,0x18]1921; X64-AVX-NEXT:    movl -{{[0-9]+}}(%rsp), %ecx # encoding: [0x8b,0x4c,0x24,0xfc]1922; X64-AVX-NEXT:    andl $-64, %ecx # encoding: [0x83,0xe1,0xc0]1923; X64-AVX-NEXT:    orl %edi, %ecx # encoding: [0x09,0xf9]1924; X64-AVX-NEXT:    movl %ecx, -{{[0-9]+}}(%rsp) # encoding: [0x89,0x4c,0x24,0xfc]1925; X64-AVX-NEXT:    vldmxcsr (%rax) # encoding: [0xc5,0xf8,0xae,0x10]1926; X64-AVX-NEXT:    retq # encoding: [0xc3]1927  %1 = alloca i32, align 41928  %2 = bitcast ptr %1 to ptr1929  call void @llvm.x86.sse.stmxcsr(ptr %2)1930  %3 = load i32, ptr %11931  %4 = and i32 %3, -641932  %5 = or i32 %4, %a01933  store i32 %5, ptr %11934  call void @llvm.x86.sse.ldmxcsr(ptr %2)1935  ret void1936}1937 1938define void @test_MM_SET_FLUSH_ZERO_MODE(i32 %a0) nounwind {1939; X86-SSE-LABEL: test_MM_SET_FLUSH_ZERO_MODE:1940; X86-SSE:       # %bb.0:1941; X86-SSE-NEXT:    pushl %eax # encoding: [0x50]1942; X86-SSE-NEXT:    movl {{[0-9]+}}(%esp), %eax # encoding: [0x8b,0x44,0x24,0x08]1943; X86-SSE-NEXT:    movl %esp, %ecx # encoding: [0x89,0xe1]1944; X86-SSE-NEXT:    stmxcsr (%ecx) # encoding: [0x0f,0xae,0x19]1945; X86-SSE-NEXT:    movl (%esp), %edx # encoding: [0x8b,0x14,0x24]1946; X86-SSE-NEXT:    andl $-32769, %edx # encoding: [0x81,0xe2,0xff,0x7f,0xff,0xff]1947; X86-SSE-NEXT:    # imm = 0xFFFF7FFF1948; X86-SSE-NEXT:    orl %eax, %edx # encoding: [0x09,0xc2]1949; X86-SSE-NEXT:    movl %edx, (%esp) # encoding: [0x89,0x14,0x24]1950; X86-SSE-NEXT:    ldmxcsr (%ecx) # encoding: [0x0f,0xae,0x11]1951; X86-SSE-NEXT:    popl %eax # encoding: [0x58]1952; X86-SSE-NEXT:    retl # encoding: [0xc3]1953;1954; X86-AVX-LABEL: test_MM_SET_FLUSH_ZERO_MODE:1955; X86-AVX:       # %bb.0:1956; X86-AVX-NEXT:    pushl %eax # encoding: [0x50]1957; X86-AVX-NEXT:    movl {{[0-9]+}}(%esp), %eax # encoding: [0x8b,0x44,0x24,0x08]1958; X86-AVX-NEXT:    movl %esp, %ecx # encoding: [0x89,0xe1]1959; X86-AVX-NEXT:    vstmxcsr (%ecx) # encoding: [0xc5,0xf8,0xae,0x19]1960; X86-AVX-NEXT:    movl (%esp), %edx # encoding: [0x8b,0x14,0x24]1961; X86-AVX-NEXT:    andl $-32769, %edx # encoding: [0x81,0xe2,0xff,0x7f,0xff,0xff]1962; X86-AVX-NEXT:    # imm = 0xFFFF7FFF1963; X86-AVX-NEXT:    orl %eax, %edx # encoding: [0x09,0xc2]1964; X86-AVX-NEXT:    movl %edx, (%esp) # encoding: [0x89,0x14,0x24]1965; X86-AVX-NEXT:    vldmxcsr (%ecx) # encoding: [0xc5,0xf8,0xae,0x11]1966; X86-AVX-NEXT:    popl %eax # encoding: [0x58]1967; X86-AVX-NEXT:    retl # encoding: [0xc3]1968;1969; X64-SSE-LABEL: test_MM_SET_FLUSH_ZERO_MODE:1970; X64-SSE:       # %bb.0:1971; X64-SSE-NEXT:    leaq -{{[0-9]+}}(%rsp), %rax # encoding: [0x48,0x8d,0x44,0x24,0xfc]1972; X64-SSE-NEXT:    stmxcsr (%rax) # encoding: [0x0f,0xae,0x18]1973; X64-SSE-NEXT:    movl -{{[0-9]+}}(%rsp), %ecx # encoding: [0x8b,0x4c,0x24,0xfc]1974; X64-SSE-NEXT:    andl $-32769, %ecx # encoding: [0x81,0xe1,0xff,0x7f,0xff,0xff]1975; X64-SSE-NEXT:    # imm = 0xFFFF7FFF1976; X64-SSE-NEXT:    orl %edi, %ecx # encoding: [0x09,0xf9]1977; X64-SSE-NEXT:    movl %ecx, -{{[0-9]+}}(%rsp) # encoding: [0x89,0x4c,0x24,0xfc]1978; X64-SSE-NEXT:    ldmxcsr (%rax) # encoding: [0x0f,0xae,0x10]1979; X64-SSE-NEXT:    retq # encoding: [0xc3]1980;1981; X64-AVX-LABEL: test_MM_SET_FLUSH_ZERO_MODE:1982; X64-AVX:       # %bb.0:1983; X64-AVX-NEXT:    leaq -{{[0-9]+}}(%rsp), %rax # encoding: [0x48,0x8d,0x44,0x24,0xfc]1984; X64-AVX-NEXT:    vstmxcsr (%rax) # encoding: [0xc5,0xf8,0xae,0x18]1985; X64-AVX-NEXT:    movl -{{[0-9]+}}(%rsp), %ecx # encoding: [0x8b,0x4c,0x24,0xfc]1986; X64-AVX-NEXT:    andl $-32769, %ecx # encoding: [0x81,0xe1,0xff,0x7f,0xff,0xff]1987; X64-AVX-NEXT:    # imm = 0xFFFF7FFF1988; X64-AVX-NEXT:    orl %edi, %ecx # encoding: [0x09,0xf9]1989; X64-AVX-NEXT:    movl %ecx, -{{[0-9]+}}(%rsp) # encoding: [0x89,0x4c,0x24,0xfc]1990; X64-AVX-NEXT:    vldmxcsr (%rax) # encoding: [0xc5,0xf8,0xae,0x10]1991; X64-AVX-NEXT:    retq # encoding: [0xc3]1992  %1 = alloca i32, align 41993  %2 = bitcast ptr %1 to ptr1994  call void @llvm.x86.sse.stmxcsr(ptr %2)1995  %3 = load i32, ptr %11996  %4 = and i32 %3, -327691997  %5 = or i32 %4, %a01998  store i32 %5, ptr %11999  call void @llvm.x86.sse.ldmxcsr(ptr %2)2000  ret void2001}2002 2003define <4 x float> @test_mm_set_ps(float %a0, float %a1, float %a2, float %a3) nounwind {2004; X86-SSE-LABEL: test_mm_set_ps:2005; X86-SSE:       # %bb.0:2006; X86-SSE-NEXT:    movss {{.*#+}} xmm0 = mem[0],zero,zero,zero2007; X86-SSE-NEXT:    # encoding: [0xf3,0x0f,0x10,0x44,0x24,0x10]2008; X86-SSE-NEXT:    movss {{.*#+}} xmm1 = mem[0],zero,zero,zero2009; X86-SSE-NEXT:    # encoding: [0xf3,0x0f,0x10,0x4c,0x24,0x0c]2010; X86-SSE-NEXT:    unpcklps %xmm1, %xmm0 # encoding: [0x0f,0x14,0xc1]2011; X86-SSE-NEXT:    # xmm0 = xmm0[0],xmm1[0],xmm0[1],xmm1[1]2012; X86-SSE-NEXT:    movss {{.*#+}} xmm1 = mem[0],zero,zero,zero2013; X86-SSE-NEXT:    # encoding: [0xf3,0x0f,0x10,0x4c,0x24,0x08]2014; X86-SSE-NEXT:    movss {{.*#+}} xmm2 = mem[0],zero,zero,zero2015; X86-SSE-NEXT:    # encoding: [0xf3,0x0f,0x10,0x54,0x24,0x04]2016; X86-SSE-NEXT:    unpcklps %xmm2, %xmm1 # encoding: [0x0f,0x14,0xca]2017; X86-SSE-NEXT:    # xmm1 = xmm1[0],xmm2[0],xmm1[1],xmm2[1]2018; X86-SSE-NEXT:    movlhps %xmm1, %xmm0 # encoding: [0x0f,0x16,0xc1]2019; X86-SSE-NEXT:    # xmm0 = xmm0[0],xmm1[0]2020; X86-SSE-NEXT:    retl # encoding: [0xc3]2021;2022; X86-AVX1-LABEL: test_mm_set_ps:2023; X86-AVX1:       # %bb.0:2024; X86-AVX1-NEXT:    vmovss {{.*#+}} xmm0 = mem[0],zero,zero,zero2025; X86-AVX1-NEXT:    # encoding: [0xc5,0xfa,0x10,0x44,0x24,0x10]2026; X86-AVX1-NEXT:    vmovss {{.*#+}} xmm1 = mem[0],zero,zero,zero2027; X86-AVX1-NEXT:    # encoding: [0xc5,0xfa,0x10,0x4c,0x24,0x0c]2028; X86-AVX1-NEXT:    vinsertps $16, %xmm1, %xmm0, %xmm0 # encoding: [0xc4,0xe3,0x79,0x21,0xc1,0x10]2029; X86-AVX1-NEXT:    # xmm0 = xmm0[0],xmm1[0],xmm0[2,3]2030; X86-AVX1-NEXT:    vmovss {{.*#+}} xmm1 = mem[0],zero,zero,zero2031; X86-AVX1-NEXT:    # encoding: [0xc5,0xfa,0x10,0x4c,0x24,0x08]2032; X86-AVX1-NEXT:    vinsertps $32, %xmm1, %xmm0, %xmm0 # encoding: [0xc4,0xe3,0x79,0x21,0xc1,0x20]2033; X86-AVX1-NEXT:    # xmm0 = xmm0[0,1],xmm1[0],xmm0[3]2034; X86-AVX1-NEXT:    vmovss {{.*#+}} xmm1 = mem[0],zero,zero,zero2035; X86-AVX1-NEXT:    # encoding: [0xc5,0xfa,0x10,0x4c,0x24,0x04]2036; X86-AVX1-NEXT:    vinsertps $48, %xmm1, %xmm0, %xmm0 # encoding: [0xc4,0xe3,0x79,0x21,0xc1,0x30]2037; X86-AVX1-NEXT:    # xmm0 = xmm0[0,1,2],xmm1[0]2038; X86-AVX1-NEXT:    retl # encoding: [0xc3]2039;2040; X86-AVX512-LABEL: test_mm_set_ps:2041; X86-AVX512:       # %bb.0:2042; X86-AVX512-NEXT:    vmovss {{.*#+}} xmm0 = mem[0],zero,zero,zero2043; X86-AVX512-NEXT:    # EVEX TO VEX Compression encoding: [0xc5,0xfa,0x10,0x44,0x24,0x10]2044; X86-AVX512-NEXT:    vmovss {{.*#+}} xmm1 = mem[0],zero,zero,zero2045; X86-AVX512-NEXT:    # EVEX TO VEX Compression encoding: [0xc5,0xfa,0x10,0x4c,0x24,0x0c]2046; X86-AVX512-NEXT:    vinsertps $16, %xmm1, %xmm0, %xmm0 # EVEX TO VEX Compression encoding: [0xc4,0xe3,0x79,0x21,0xc1,0x10]2047; X86-AVX512-NEXT:    # xmm0 = xmm0[0],xmm1[0],xmm0[2,3]2048; X86-AVX512-NEXT:    vmovss {{.*#+}} xmm1 = mem[0],zero,zero,zero2049; X86-AVX512-NEXT:    # EVEX TO VEX Compression encoding: [0xc5,0xfa,0x10,0x4c,0x24,0x08]2050; X86-AVX512-NEXT:    vinsertps $32, %xmm1, %xmm0, %xmm0 # EVEX TO VEX Compression encoding: [0xc4,0xe3,0x79,0x21,0xc1,0x20]2051; X86-AVX512-NEXT:    # xmm0 = xmm0[0,1],xmm1[0],xmm0[3]2052; X86-AVX512-NEXT:    vmovss {{.*#+}} xmm1 = mem[0],zero,zero,zero2053; X86-AVX512-NEXT:    # EVEX TO VEX Compression encoding: [0xc5,0xfa,0x10,0x4c,0x24,0x04]2054; X86-AVX512-NEXT:    vinsertps $48, %xmm1, %xmm0, %xmm0 # EVEX TO VEX Compression encoding: [0xc4,0xe3,0x79,0x21,0xc1,0x30]2055; X86-AVX512-NEXT:    # xmm0 = xmm0[0,1,2],xmm1[0]2056; X86-AVX512-NEXT:    retl # encoding: [0xc3]2057;2058; X64-SSE-LABEL: test_mm_set_ps:2059; X64-SSE:       # %bb.0:2060; X64-SSE-NEXT:    unpcklps %xmm0, %xmm1 # encoding: [0x0f,0x14,0xc8]2061; X64-SSE-NEXT:    # xmm1 = xmm1[0],xmm0[0],xmm1[1],xmm0[1]2062; X64-SSE-NEXT:    unpcklps %xmm2, %xmm3 # encoding: [0x0f,0x14,0xda]2063; X64-SSE-NEXT:    # xmm3 = xmm3[0],xmm2[0],xmm3[1],xmm2[1]2064; X64-SSE-NEXT:    movlhps %xmm1, %xmm3 # encoding: [0x0f,0x16,0xd9]2065; X64-SSE-NEXT:    # xmm3 = xmm3[0],xmm1[0]2066; X64-SSE-NEXT:    movaps %xmm3, %xmm0 # encoding: [0x0f,0x28,0xc3]2067; X64-SSE-NEXT:    retq # encoding: [0xc3]2068;2069; X64-AVX1-LABEL: test_mm_set_ps:2070; X64-AVX1:       # %bb.0:2071; X64-AVX1-NEXT:    vinsertps $16, %xmm2, %xmm3, %xmm2 # encoding: [0xc4,0xe3,0x61,0x21,0xd2,0x10]2072; X64-AVX1-NEXT:    # xmm2 = xmm3[0],xmm2[0],xmm3[2,3]2073; X64-AVX1-NEXT:    vinsertps $32, %xmm1, %xmm2, %xmm1 # encoding: [0xc4,0xe3,0x69,0x21,0xc9,0x20]2074; X64-AVX1-NEXT:    # xmm1 = xmm2[0,1],xmm1[0],xmm2[3]2075; X64-AVX1-NEXT:    vinsertps $48, %xmm0, %xmm1, %xmm0 # encoding: [0xc4,0xe3,0x71,0x21,0xc0,0x30]2076; X64-AVX1-NEXT:    # xmm0 = xmm1[0,1,2],xmm0[0]2077; X64-AVX1-NEXT:    retq # encoding: [0xc3]2078;2079; X64-AVX512-LABEL: test_mm_set_ps:2080; X64-AVX512:       # %bb.0:2081; X64-AVX512-NEXT:    vinsertps $16, %xmm2, %xmm3, %xmm2 # EVEX TO VEX Compression encoding: [0xc4,0xe3,0x61,0x21,0xd2,0x10]2082; X64-AVX512-NEXT:    # xmm2 = xmm3[0],xmm2[0],xmm3[2,3]2083; X64-AVX512-NEXT:    vinsertps $32, %xmm1, %xmm2, %xmm1 # EVEX TO VEX Compression encoding: [0xc4,0xe3,0x69,0x21,0xc9,0x20]2084; X64-AVX512-NEXT:    # xmm1 = xmm2[0,1],xmm1[0],xmm2[3]2085; X64-AVX512-NEXT:    vinsertps $48, %xmm0, %xmm1, %xmm0 # EVEX TO VEX Compression encoding: [0xc4,0xe3,0x71,0x21,0xc0,0x30]2086; X64-AVX512-NEXT:    # xmm0 = xmm1[0,1,2],xmm0[0]2087; X64-AVX512-NEXT:    retq # encoding: [0xc3]2088  %res0  = insertelement <4 x float> undef, float %a3, i32 02089  %res1  = insertelement <4 x float> %res0, float %a2, i32 12090  %res2  = insertelement <4 x float> %res1, float %a1, i32 22091  %res3  = insertelement <4 x float> %res2, float %a0, i32 32092  ret <4 x float> %res32093}2094 2095define <4 x float> @test_mm_set_ps1(float %a0) nounwind {2096; X86-SSE-LABEL: test_mm_set_ps1:2097; X86-SSE:       # %bb.0:2098; X86-SSE-NEXT:    movss {{.*#+}} xmm0 = mem[0],zero,zero,zero2099; X86-SSE-NEXT:    # encoding: [0xf3,0x0f,0x10,0x44,0x24,0x04]2100; X86-SSE-NEXT:    shufps $0, %xmm0, %xmm0 # encoding: [0x0f,0xc6,0xc0,0x00]2101; X86-SSE-NEXT:    # xmm0 = xmm0[0,0,0,0]2102; X86-SSE-NEXT:    retl # encoding: [0xc3]2103;2104; X86-AVX1-LABEL: test_mm_set_ps1:2105; X86-AVX1:       # %bb.0:2106; X86-AVX1-NEXT:    vmovss {{.*#+}} xmm0 = mem[0],zero,zero,zero2107; X86-AVX1-NEXT:    # encoding: [0xc5,0xfa,0x10,0x44,0x24,0x04]2108; X86-AVX1-NEXT:    vshufps $0, %xmm0, %xmm0, %xmm0 # encoding: [0xc5,0xf8,0xc6,0xc0,0x00]2109; X86-AVX1-NEXT:    # xmm0 = xmm0[0,0,0,0]2110; X86-AVX1-NEXT:    retl # encoding: [0xc3]2111;2112; X86-AVX512-LABEL: test_mm_set_ps1:2113; X86-AVX512:       # %bb.0:2114; X86-AVX512-NEXT:    vmovss {{.*#+}} xmm0 = mem[0],zero,zero,zero2115; X86-AVX512-NEXT:    # EVEX TO VEX Compression encoding: [0xc5,0xfa,0x10,0x44,0x24,0x04]2116; X86-AVX512-NEXT:    vbroadcastss %xmm0, %xmm0 # EVEX TO VEX Compression encoding: [0xc4,0xe2,0x79,0x18,0xc0]2117; X86-AVX512-NEXT:    retl # encoding: [0xc3]2118;2119; X64-SSE-LABEL: test_mm_set_ps1:2120; X64-SSE:       # %bb.0:2121; X64-SSE-NEXT:    shufps $0, %xmm0, %xmm0 # encoding: [0x0f,0xc6,0xc0,0x00]2122; X64-SSE-NEXT:    # xmm0 = xmm0[0,0,0,0]2123; X64-SSE-NEXT:    retq # encoding: [0xc3]2124;2125; X64-AVX1-LABEL: test_mm_set_ps1:2126; X64-AVX1:       # %bb.0:2127; X64-AVX1-NEXT:    vshufps $0, %xmm0, %xmm0, %xmm0 # encoding: [0xc5,0xf8,0xc6,0xc0,0x00]2128; X64-AVX1-NEXT:    # xmm0 = xmm0[0,0,0,0]2129; X64-AVX1-NEXT:    retq # encoding: [0xc3]2130;2131; X64-AVX512-LABEL: test_mm_set_ps1:2132; X64-AVX512:       # %bb.0:2133; X64-AVX512-NEXT:    vbroadcastss %xmm0, %xmm0 # EVEX TO VEX Compression encoding: [0xc4,0xe2,0x79,0x18,0xc0]2134; X64-AVX512-NEXT:    retq # encoding: [0xc3]2135  %res0  = insertelement <4 x float> undef, float %a0, i32 02136  %res1  = insertelement <4 x float> %res0, float %a0, i32 12137  %res2  = insertelement <4 x float> %res1, float %a0, i32 22138  %res3  = insertelement <4 x float> %res2, float %a0, i32 32139  ret <4 x float> %res32140}2141 2142define void @test_MM_SET_ROUNDING_MODE(i32 %a0) nounwind {2143; X86-SSE-LABEL: test_MM_SET_ROUNDING_MODE:2144; X86-SSE:       # %bb.0:2145; X86-SSE-NEXT:    pushl %eax # encoding: [0x50]2146; X86-SSE-NEXT:    movl {{[0-9]+}}(%esp), %eax # encoding: [0x8b,0x44,0x24,0x08]2147; X86-SSE-NEXT:    movl %esp, %ecx # encoding: [0x89,0xe1]2148; X86-SSE-NEXT:    stmxcsr (%ecx) # encoding: [0x0f,0xae,0x19]2149; X86-SSE-NEXT:    movl (%esp), %edx # encoding: [0x8b,0x14,0x24]2150; X86-SSE-NEXT:    andl $-24577, %edx # encoding: [0x81,0xe2,0xff,0x9f,0xff,0xff]2151; X86-SSE-NEXT:    # imm = 0x9FFF2152; X86-SSE-NEXT:    orl %eax, %edx # encoding: [0x09,0xc2]2153; X86-SSE-NEXT:    movl %edx, (%esp) # encoding: [0x89,0x14,0x24]2154; X86-SSE-NEXT:    ldmxcsr (%ecx) # encoding: [0x0f,0xae,0x11]2155; X86-SSE-NEXT:    popl %eax # encoding: [0x58]2156; X86-SSE-NEXT:    retl # encoding: [0xc3]2157;2158; X86-AVX-LABEL: test_MM_SET_ROUNDING_MODE:2159; X86-AVX:       # %bb.0:2160; X86-AVX-NEXT:    pushl %eax # encoding: [0x50]2161; X86-AVX-NEXT:    movl {{[0-9]+}}(%esp), %eax # encoding: [0x8b,0x44,0x24,0x08]2162; X86-AVX-NEXT:    movl %esp, %ecx # encoding: [0x89,0xe1]2163; X86-AVX-NEXT:    vstmxcsr (%ecx) # encoding: [0xc5,0xf8,0xae,0x19]2164; X86-AVX-NEXT:    movl (%esp), %edx # encoding: [0x8b,0x14,0x24]2165; X86-AVX-NEXT:    andl $-24577, %edx # encoding: [0x81,0xe2,0xff,0x9f,0xff,0xff]2166; X86-AVX-NEXT:    # imm = 0x9FFF2167; X86-AVX-NEXT:    orl %eax, %edx # encoding: [0x09,0xc2]2168; X86-AVX-NEXT:    movl %edx, (%esp) # encoding: [0x89,0x14,0x24]2169; X86-AVX-NEXT:    vldmxcsr (%ecx) # encoding: [0xc5,0xf8,0xae,0x11]2170; X86-AVX-NEXT:    popl %eax # encoding: [0x58]2171; X86-AVX-NEXT:    retl # encoding: [0xc3]2172;2173; X64-SSE-LABEL: test_MM_SET_ROUNDING_MODE:2174; X64-SSE:       # %bb.0:2175; X64-SSE-NEXT:    leaq -{{[0-9]+}}(%rsp), %rax # encoding: [0x48,0x8d,0x44,0x24,0xfc]2176; X64-SSE-NEXT:    stmxcsr (%rax) # encoding: [0x0f,0xae,0x18]2177; X64-SSE-NEXT:    movl -{{[0-9]+}}(%rsp), %ecx # encoding: [0x8b,0x4c,0x24,0xfc]2178; X64-SSE-NEXT:    andl $-24577, %ecx # encoding: [0x81,0xe1,0xff,0x9f,0xff,0xff]2179; X64-SSE-NEXT:    # imm = 0x9FFF2180; X64-SSE-NEXT:    orl %edi, %ecx # encoding: [0x09,0xf9]2181; X64-SSE-NEXT:    movl %ecx, -{{[0-9]+}}(%rsp) # encoding: [0x89,0x4c,0x24,0xfc]2182; X64-SSE-NEXT:    ldmxcsr (%rax) # encoding: [0x0f,0xae,0x10]2183; X64-SSE-NEXT:    retq # encoding: [0xc3]2184;2185; X64-AVX-LABEL: test_MM_SET_ROUNDING_MODE:2186; X64-AVX:       # %bb.0:2187; X64-AVX-NEXT:    leaq -{{[0-9]+}}(%rsp), %rax # encoding: [0x48,0x8d,0x44,0x24,0xfc]2188; X64-AVX-NEXT:    vstmxcsr (%rax) # encoding: [0xc5,0xf8,0xae,0x18]2189; X64-AVX-NEXT:    movl -{{[0-9]+}}(%rsp), %ecx # encoding: [0x8b,0x4c,0x24,0xfc]2190; X64-AVX-NEXT:    andl $-24577, %ecx # encoding: [0x81,0xe1,0xff,0x9f,0xff,0xff]2191; X64-AVX-NEXT:    # imm = 0x9FFF2192; X64-AVX-NEXT:    orl %edi, %ecx # encoding: [0x09,0xf9]2193; X64-AVX-NEXT:    movl %ecx, -{{[0-9]+}}(%rsp) # encoding: [0x89,0x4c,0x24,0xfc]2194; X64-AVX-NEXT:    vldmxcsr (%rax) # encoding: [0xc5,0xf8,0xae,0x10]2195; X64-AVX-NEXT:    retq # encoding: [0xc3]2196  %1 = alloca i32, align 42197  %2 = bitcast ptr %1 to ptr2198  call void @llvm.x86.sse.stmxcsr(ptr %2)2199  %3 = load i32, ptr %12200  %4 = and i32 %3, -245772201  %5 = or i32 %4, %a02202  store i32 %5, ptr %12203  call void @llvm.x86.sse.ldmxcsr(ptr %2)2204  ret void2205}2206 2207define <4 x float> @test_mm_set_ss(float %a0) nounwind {2208; X86-SSE-LABEL: test_mm_set_ss:2209; X86-SSE:       # %bb.0:2210; X86-SSE-NEXT:    movss {{.*#+}} xmm1 = mem[0],zero,zero,zero2211; X86-SSE-NEXT:    # encoding: [0xf3,0x0f,0x10,0x4c,0x24,0x04]2212; X86-SSE-NEXT:    xorps %xmm0, %xmm0 # encoding: [0x0f,0x57,0xc0]2213; X86-SSE-NEXT:    movss %xmm1, %xmm0 # encoding: [0xf3,0x0f,0x10,0xc1]2214; X86-SSE-NEXT:    # xmm0 = xmm1[0],xmm0[1,2,3]2215; X86-SSE-NEXT:    retl # encoding: [0xc3]2216;2217; X86-AVX1-LABEL: test_mm_set_ss:2218; X86-AVX1:       # %bb.0:2219; X86-AVX1-NEXT:    vmovss {{.*#+}} xmm0 = mem[0],zero,zero,zero2220; X86-AVX1-NEXT:    # encoding: [0xc5,0xfa,0x10,0x44,0x24,0x04]2221; X86-AVX1-NEXT:    vxorps %xmm1, %xmm1, %xmm1 # encoding: [0xc5,0xf0,0x57,0xc9]2222; X86-AVX1-NEXT:    vmovss %xmm0, %xmm1, %xmm0 # encoding: [0xc5,0xf2,0x10,0xc0]2223; X86-AVX1-NEXT:    # xmm0 = xmm0[0],xmm1[1,2,3]2224; X86-AVX1-NEXT:    retl # encoding: [0xc3]2225;2226; X86-AVX512-LABEL: test_mm_set_ss:2227; X86-AVX512:       # %bb.0:2228; X86-AVX512-NEXT:    vmovss {{.*#+}} xmm0 = mem[0],zero,zero,zero2229; X86-AVX512-NEXT:    # EVEX TO VEX Compression encoding: [0xc5,0xfa,0x10,0x44,0x24,0x04]2230; X86-AVX512-NEXT:    vxorps %xmm1, %xmm1, %xmm1 # encoding: [0xc5,0xf0,0x57,0xc9]2231; X86-AVX512-NEXT:    vmovss %xmm0, %xmm1, %xmm0 # encoding: [0xc5,0xf2,0x10,0xc0]2232; X86-AVX512-NEXT:    # xmm0 = xmm0[0],xmm1[1,2,3]2233; X86-AVX512-NEXT:    retl # encoding: [0xc3]2234;2235; X64-SSE-LABEL: test_mm_set_ss:2236; X64-SSE:       # %bb.0:2237; X64-SSE-NEXT:    xorps %xmm1, %xmm1 # encoding: [0x0f,0x57,0xc9]2238; X64-SSE-NEXT:    movss %xmm0, %xmm1 # encoding: [0xf3,0x0f,0x10,0xc8]2239; X64-SSE-NEXT:    # xmm1 = xmm0[0],xmm1[1,2,3]2240; X64-SSE-NEXT:    movaps %xmm1, %xmm0 # encoding: [0x0f,0x28,0xc1]2241; X64-SSE-NEXT:    retq # encoding: [0xc3]2242;2243; X64-AVX-LABEL: test_mm_set_ss:2244; X64-AVX:       # %bb.0:2245; X64-AVX-NEXT:    vxorps %xmm1, %xmm1, %xmm1 # encoding: [0xc5,0xf0,0x57,0xc9]2246; X64-AVX-NEXT:    vmovss %xmm0, %xmm1, %xmm0 # encoding: [0xc5,0xf2,0x10,0xc0]2247; X64-AVX-NEXT:    # xmm0 = xmm0[0],xmm1[1,2,3]2248; X64-AVX-NEXT:    retq # encoding: [0xc3]2249  %res0  = insertelement <4 x float> undef, float %a0, i32 02250  %res1  = insertelement <4 x float> %res0, float 0.0, i32 12251  %res2  = insertelement <4 x float> %res1, float 0.0, i32 22252  %res3  = insertelement <4 x float> %res2, float 0.0, i32 32253  ret <4 x float> %res32254}2255 2256define <4 x float> @test_mm_set1_ps(float %a0) nounwind {2257; X86-SSE-LABEL: test_mm_set1_ps:2258; X86-SSE:       # %bb.0:2259; X86-SSE-NEXT:    movss {{.*#+}} xmm0 = mem[0],zero,zero,zero2260; X86-SSE-NEXT:    # encoding: [0xf3,0x0f,0x10,0x44,0x24,0x04]2261; X86-SSE-NEXT:    shufps $0, %xmm0, %xmm0 # encoding: [0x0f,0xc6,0xc0,0x00]2262; X86-SSE-NEXT:    # xmm0 = xmm0[0,0,0,0]2263; X86-SSE-NEXT:    retl # encoding: [0xc3]2264;2265; X86-AVX1-LABEL: test_mm_set1_ps:2266; X86-AVX1:       # %bb.0:2267; X86-AVX1-NEXT:    vmovss {{.*#+}} xmm0 = mem[0],zero,zero,zero2268; X86-AVX1-NEXT:    # encoding: [0xc5,0xfa,0x10,0x44,0x24,0x04]2269; X86-AVX1-NEXT:    vshufps $0, %xmm0, %xmm0, %xmm0 # encoding: [0xc5,0xf8,0xc6,0xc0,0x00]2270; X86-AVX1-NEXT:    # xmm0 = xmm0[0,0,0,0]2271; X86-AVX1-NEXT:    retl # encoding: [0xc3]2272;2273; X86-AVX512-LABEL: test_mm_set1_ps:2274; X86-AVX512:       # %bb.0:2275; X86-AVX512-NEXT:    vmovss {{.*#+}} xmm0 = mem[0],zero,zero,zero2276; X86-AVX512-NEXT:    # EVEX TO VEX Compression encoding: [0xc5,0xfa,0x10,0x44,0x24,0x04]2277; X86-AVX512-NEXT:    vbroadcastss %xmm0, %xmm0 # EVEX TO VEX Compression encoding: [0xc4,0xe2,0x79,0x18,0xc0]2278; X86-AVX512-NEXT:    retl # encoding: [0xc3]2279;2280; X64-SSE-LABEL: test_mm_set1_ps:2281; X64-SSE:       # %bb.0:2282; X64-SSE-NEXT:    shufps $0, %xmm0, %xmm0 # encoding: [0x0f,0xc6,0xc0,0x00]2283; X64-SSE-NEXT:    # xmm0 = xmm0[0,0,0,0]2284; X64-SSE-NEXT:    retq # encoding: [0xc3]2285;2286; X64-AVX1-LABEL: test_mm_set1_ps:2287; X64-AVX1:       # %bb.0:2288; X64-AVX1-NEXT:    vshufps $0, %xmm0, %xmm0, %xmm0 # encoding: [0xc5,0xf8,0xc6,0xc0,0x00]2289; X64-AVX1-NEXT:    # xmm0 = xmm0[0,0,0,0]2290; X64-AVX1-NEXT:    retq # encoding: [0xc3]2291;2292; X64-AVX512-LABEL: test_mm_set1_ps:2293; X64-AVX512:       # %bb.0:2294; X64-AVX512-NEXT:    vbroadcastss %xmm0, %xmm0 # EVEX TO VEX Compression encoding: [0xc4,0xe2,0x79,0x18,0xc0]2295; X64-AVX512-NEXT:    retq # encoding: [0xc3]2296  %res0  = insertelement <4 x float> undef, float %a0, i32 02297  %res1  = insertelement <4 x float> %res0, float %a0, i32 12298  %res2  = insertelement <4 x float> %res1, float %a0, i32 22299  %res3  = insertelement <4 x float> %res2, float %a0, i32 32300  ret <4 x float> %res32301}2302 2303define void @test_mm_setcsr(i32 %a0) nounwind {2304; X86-SSE-LABEL: test_mm_setcsr:2305; X86-SSE:       # %bb.0:2306; X86-SSE-NEXT:    leal {{[0-9]+}}(%esp), %eax # encoding: [0x8d,0x44,0x24,0x04]2307; X86-SSE-NEXT:    ldmxcsr (%eax) # encoding: [0x0f,0xae,0x10]2308; X86-SSE-NEXT:    retl # encoding: [0xc3]2309;2310; X86-AVX-LABEL: test_mm_setcsr:2311; X86-AVX:       # %bb.0:2312; X86-AVX-NEXT:    leal {{[0-9]+}}(%esp), %eax # encoding: [0x8d,0x44,0x24,0x04]2313; X86-AVX-NEXT:    vldmxcsr (%eax) # encoding: [0xc5,0xf8,0xae,0x10]2314; X86-AVX-NEXT:    retl # encoding: [0xc3]2315;2316; X64-SSE-LABEL: test_mm_setcsr:2317; X64-SSE:       # %bb.0:2318; X64-SSE-NEXT:    movl %edi, -{{[0-9]+}}(%rsp) # encoding: [0x89,0x7c,0x24,0xfc]2319; X64-SSE-NEXT:    leaq -{{[0-9]+}}(%rsp), %rax # encoding: [0x48,0x8d,0x44,0x24,0xfc]2320; X64-SSE-NEXT:    ldmxcsr (%rax) # encoding: [0x0f,0xae,0x10]2321; X64-SSE-NEXT:    retq # encoding: [0xc3]2322;2323; X64-AVX-LABEL: test_mm_setcsr:2324; X64-AVX:       # %bb.0:2325; X64-AVX-NEXT:    movl %edi, -{{[0-9]+}}(%rsp) # encoding: [0x89,0x7c,0x24,0xfc]2326; X64-AVX-NEXT:    leaq -{{[0-9]+}}(%rsp), %rax # encoding: [0x48,0x8d,0x44,0x24,0xfc]2327; X64-AVX-NEXT:    vldmxcsr (%rax) # encoding: [0xc5,0xf8,0xae,0x10]2328; X64-AVX-NEXT:    retq # encoding: [0xc3]2329  %st = alloca i32, align 42330  store i32 %a0, ptr %st, align 42331  %bc = bitcast ptr %st to ptr2332  call void @llvm.x86.sse.ldmxcsr(ptr %bc)2333  ret void2334}2335 2336define <4 x float> @test_mm_setr_ps(float %a0, float %a1, float %a2, float %a3) nounwind {2337; X86-SSE-LABEL: test_mm_setr_ps:2338; X86-SSE:       # %bb.0:2339; X86-SSE-NEXT:    movss {{.*#+}} xmm0 = mem[0],zero,zero,zero2340; X86-SSE-NEXT:    # encoding: [0xf3,0x0f,0x10,0x44,0x24,0x10]2341; X86-SSE-NEXT:    movss {{.*#+}} xmm1 = mem[0],zero,zero,zero2342; X86-SSE-NEXT:    # encoding: [0xf3,0x0f,0x10,0x4c,0x24,0x0c]2343; X86-SSE-NEXT:    unpcklps %xmm0, %xmm1 # encoding: [0x0f,0x14,0xc8]2344; X86-SSE-NEXT:    # xmm1 = xmm1[0],xmm0[0],xmm1[1],xmm0[1]2345; X86-SSE-NEXT:    movss {{.*#+}} xmm2 = mem[0],zero,zero,zero2346; X86-SSE-NEXT:    # encoding: [0xf3,0x0f,0x10,0x54,0x24,0x08]2347; X86-SSE-NEXT:    movss {{.*#+}} xmm0 = mem[0],zero,zero,zero2348; X86-SSE-NEXT:    # encoding: [0xf3,0x0f,0x10,0x44,0x24,0x04]2349; X86-SSE-NEXT:    unpcklps %xmm2, %xmm0 # encoding: [0x0f,0x14,0xc2]2350; X86-SSE-NEXT:    # xmm0 = xmm0[0],xmm2[0],xmm0[1],xmm2[1]2351; X86-SSE-NEXT:    movlhps %xmm1, %xmm0 # encoding: [0x0f,0x16,0xc1]2352; X86-SSE-NEXT:    # xmm0 = xmm0[0],xmm1[0]2353; X86-SSE-NEXT:    retl # encoding: [0xc3]2354;2355; X86-AVX1-LABEL: test_mm_setr_ps:2356; X86-AVX1:       # %bb.0:2357; X86-AVX1-NEXT:    vmovss {{.*#+}} xmm0 = mem[0],zero,zero,zero2358; X86-AVX1-NEXT:    # encoding: [0xc5,0xfa,0x10,0x44,0x24,0x10]2359; X86-AVX1-NEXT:    vmovss {{.*#+}} xmm1 = mem[0],zero,zero,zero2360; X86-AVX1-NEXT:    # encoding: [0xc5,0xfa,0x10,0x4c,0x24,0x0c]2361; X86-AVX1-NEXT:    vmovss {{.*#+}} xmm2 = mem[0],zero,zero,zero2362; X86-AVX1-NEXT:    # encoding: [0xc5,0xfa,0x10,0x54,0x24,0x08]2363; X86-AVX1-NEXT:    vmovss {{.*#+}} xmm3 = mem[0],zero,zero,zero2364; X86-AVX1-NEXT:    # encoding: [0xc5,0xfa,0x10,0x5c,0x24,0x04]2365; X86-AVX1-NEXT:    vinsertps $16, %xmm2, %xmm3, %xmm2 # encoding: [0xc4,0xe3,0x61,0x21,0xd2,0x10]2366; X86-AVX1-NEXT:    # xmm2 = xmm3[0],xmm2[0],xmm3[2,3]2367; X86-AVX1-NEXT:    vinsertps $32, %xmm1, %xmm2, %xmm1 # encoding: [0xc4,0xe3,0x69,0x21,0xc9,0x20]2368; X86-AVX1-NEXT:    # xmm1 = xmm2[0,1],xmm1[0],xmm2[3]2369; X86-AVX1-NEXT:    vinsertps $48, %xmm0, %xmm1, %xmm0 # encoding: [0xc4,0xe3,0x71,0x21,0xc0,0x30]2370; X86-AVX1-NEXT:    # xmm0 = xmm1[0,1,2],xmm0[0]2371; X86-AVX1-NEXT:    retl # encoding: [0xc3]2372;2373; X86-AVX512-LABEL: test_mm_setr_ps:2374; X86-AVX512:       # %bb.0:2375; X86-AVX512-NEXT:    vmovss {{.*#+}} xmm0 = mem[0],zero,zero,zero2376; X86-AVX512-NEXT:    # EVEX TO VEX Compression encoding: [0xc5,0xfa,0x10,0x44,0x24,0x10]2377; X86-AVX512-NEXT:    vmovss {{.*#+}} xmm1 = mem[0],zero,zero,zero2378; X86-AVX512-NEXT:    # EVEX TO VEX Compression encoding: [0xc5,0xfa,0x10,0x4c,0x24,0x0c]2379; X86-AVX512-NEXT:    vmovss {{.*#+}} xmm2 = mem[0],zero,zero,zero2380; X86-AVX512-NEXT:    # EVEX TO VEX Compression encoding: [0xc5,0xfa,0x10,0x54,0x24,0x08]2381; X86-AVX512-NEXT:    vmovss {{.*#+}} xmm3 = mem[0],zero,zero,zero2382; X86-AVX512-NEXT:    # EVEX TO VEX Compression encoding: [0xc5,0xfa,0x10,0x5c,0x24,0x04]2383; X86-AVX512-NEXT:    vinsertps $16, %xmm2, %xmm3, %xmm2 # EVEX TO VEX Compression encoding: [0xc4,0xe3,0x61,0x21,0xd2,0x10]2384; X86-AVX512-NEXT:    # xmm2 = xmm3[0],xmm2[0],xmm3[2,3]2385; X86-AVX512-NEXT:    vinsertps $32, %xmm1, %xmm2, %xmm1 # EVEX TO VEX Compression encoding: [0xc4,0xe3,0x69,0x21,0xc9,0x20]2386; X86-AVX512-NEXT:    # xmm1 = xmm2[0,1],xmm1[0],xmm2[3]2387; X86-AVX512-NEXT:    vinsertps $48, %xmm0, %xmm1, %xmm0 # EVEX TO VEX Compression encoding: [0xc4,0xe3,0x71,0x21,0xc0,0x30]2388; X86-AVX512-NEXT:    # xmm0 = xmm1[0,1,2],xmm0[0]2389; X86-AVX512-NEXT:    retl # encoding: [0xc3]2390;2391; X64-SSE-LABEL: test_mm_setr_ps:2392; X64-SSE:       # %bb.0:2393; X64-SSE-NEXT:    unpcklps %xmm3, %xmm2 # encoding: [0x0f,0x14,0xd3]2394; X64-SSE-NEXT:    # xmm2 = xmm2[0],xmm3[0],xmm2[1],xmm3[1]2395; X64-SSE-NEXT:    unpcklps %xmm1, %xmm0 # encoding: [0x0f,0x14,0xc1]2396; X64-SSE-NEXT:    # xmm0 = xmm0[0],xmm1[0],xmm0[1],xmm1[1]2397; X64-SSE-NEXT:    movlhps %xmm2, %xmm0 # encoding: [0x0f,0x16,0xc2]2398; X64-SSE-NEXT:    # xmm0 = xmm0[0],xmm2[0]2399; X64-SSE-NEXT:    retq # encoding: [0xc3]2400;2401; X64-AVX1-LABEL: test_mm_setr_ps:2402; X64-AVX1:       # %bb.0:2403; X64-AVX1-NEXT:    vinsertps $16, %xmm1, %xmm0, %xmm0 # encoding: [0xc4,0xe3,0x79,0x21,0xc1,0x10]2404; X64-AVX1-NEXT:    # xmm0 = xmm0[0],xmm1[0],xmm0[2,3]2405; X64-AVX1-NEXT:    vinsertps $32, %xmm2, %xmm0, %xmm0 # encoding: [0xc4,0xe3,0x79,0x21,0xc2,0x20]2406; X64-AVX1-NEXT:    # xmm0 = xmm0[0,1],xmm2[0],xmm0[3]2407; X64-AVX1-NEXT:    vinsertps $48, %xmm3, %xmm0, %xmm0 # encoding: [0xc4,0xe3,0x79,0x21,0xc3,0x30]2408; X64-AVX1-NEXT:    # xmm0 = xmm0[0,1,2],xmm3[0]2409; X64-AVX1-NEXT:    retq # encoding: [0xc3]2410;2411; X64-AVX512-LABEL: test_mm_setr_ps:2412; X64-AVX512:       # %bb.0:2413; X64-AVX512-NEXT:    vinsertps $16, %xmm1, %xmm0, %xmm0 # EVEX TO VEX Compression encoding: [0xc4,0xe3,0x79,0x21,0xc1,0x10]2414; X64-AVX512-NEXT:    # xmm0 = xmm0[0],xmm1[0],xmm0[2,3]2415; X64-AVX512-NEXT:    vinsertps $32, %xmm2, %xmm0, %xmm0 # EVEX TO VEX Compression encoding: [0xc4,0xe3,0x79,0x21,0xc2,0x20]2416; X64-AVX512-NEXT:    # xmm0 = xmm0[0,1],xmm2[0],xmm0[3]2417; X64-AVX512-NEXT:    vinsertps $48, %xmm3, %xmm0, %xmm0 # EVEX TO VEX Compression encoding: [0xc4,0xe3,0x79,0x21,0xc3,0x30]2418; X64-AVX512-NEXT:    # xmm0 = xmm0[0,1,2],xmm3[0]2419; X64-AVX512-NEXT:    retq # encoding: [0xc3]2420  %res0  = insertelement <4 x float> undef, float %a0, i32 02421  %res1  = insertelement <4 x float> %res0, float %a1, i32 12422  %res2  = insertelement <4 x float> %res1, float %a2, i32 22423  %res3  = insertelement <4 x float> %res2, float %a3, i32 32424  ret <4 x float> %res32425}2426 2427define <4 x float> @test_mm_setzero_ps() {2428; SSE-LABEL: test_mm_setzero_ps:2429; SSE:       # %bb.0:2430; SSE-NEXT:    xorps %xmm0, %xmm0 # encoding: [0x0f,0x57,0xc0]2431; SSE-NEXT:    ret{{[l|q]}} # encoding: [0xc3]2432;2433; AVX1-LABEL: test_mm_setzero_ps:2434; AVX1:       # %bb.0:2435; AVX1-NEXT:    vxorps %xmm0, %xmm0, %xmm0 # encoding: [0xc5,0xf8,0x57,0xc0]2436; AVX1-NEXT:    ret{{[l|q]}} # encoding: [0xc3]2437;2438; AVX512-LABEL: test_mm_setzero_ps:2439; AVX512:       # %bb.0:2440; AVX512-NEXT:    vxorps %xmm0, %xmm0, %xmm0 # EVEX TO VEX Compression encoding: [0xc5,0xf8,0x57,0xc0]2441; AVX512-NEXT:    ret{{[l|q]}} # encoding: [0xc3]2442  ret <4 x float> zeroinitializer2443}2444 2445define void @test_mm_sfence() nounwind {2446; CHECK-LABEL: test_mm_sfence:2447; CHECK:       # %bb.0:2448; CHECK-NEXT:    sfence # encoding: [0x0f,0xae,0xf8]2449; CHECK-NEXT:    ret{{[l|q]}} # encoding: [0xc3]2450  call void @llvm.x86.sse.sfence()2451  ret void2452}2453declare void @llvm.x86.sse.sfence() nounwind readnone2454 2455define <4 x float> @test_mm_shuffle_ps(<4 x float> %a0, <4 x float> %a1) nounwind {2456; SSE-LABEL: test_mm_shuffle_ps:2457; SSE:       # %bb.0:2458; SSE-NEXT:    shufps $0, %xmm1, %xmm0 # encoding: [0x0f,0xc6,0xc1,0x00]2459; SSE-NEXT:    # xmm0 = xmm0[0,0],xmm1[0,0]2460; SSE-NEXT:    ret{{[l|q]}} # encoding: [0xc3]2461;2462; AVX1-LABEL: test_mm_shuffle_ps:2463; AVX1:       # %bb.0:2464; AVX1-NEXT:    vshufps $0, %xmm1, %xmm0, %xmm0 # encoding: [0xc5,0xf8,0xc6,0xc1,0x00]2465; AVX1-NEXT:    # xmm0 = xmm0[0,0],xmm1[0,0]2466; AVX1-NEXT:    ret{{[l|q]}} # encoding: [0xc3]2467;2468; AVX512-LABEL: test_mm_shuffle_ps:2469; AVX512:       # %bb.0:2470; AVX512-NEXT:    vshufps $0, %xmm1, %xmm0, %xmm0 # EVEX TO VEX Compression encoding: [0xc5,0xf8,0xc6,0xc1,0x00]2471; AVX512-NEXT:    # xmm0 = xmm0[0,0],xmm1[0,0]2472; AVX512-NEXT:    ret{{[l|q]}} # encoding: [0xc3]2473  %res = shufflevector <4 x float> %a0, <4 x float> %a1, <4 x i32> <i32 0, i32 0, i32 4, i32 4>2474  ret <4 x float> %res2475}2476 2477define <4 x float> @test_mm_sqrt_ps(<4 x float> %a0) {2478; SSE-LABEL: test_mm_sqrt_ps:2479; SSE:       # %bb.0:2480; SSE-NEXT:    sqrtps %xmm0, %xmm0 # encoding: [0x0f,0x51,0xc0]2481; SSE-NEXT:    ret{{[l|q]}} # encoding: [0xc3]2482;2483; AVX1-LABEL: test_mm_sqrt_ps:2484; AVX1:       # %bb.0:2485; AVX1-NEXT:    vsqrtps %xmm0, %xmm0 # encoding: [0xc5,0xf8,0x51,0xc0]2486; AVX1-NEXT:    ret{{[l|q]}} # encoding: [0xc3]2487;2488; AVX512-LABEL: test_mm_sqrt_ps:2489; AVX512:       # %bb.0:2490; AVX512-NEXT:    vsqrtps %xmm0, %xmm0 # EVEX TO VEX Compression encoding: [0xc5,0xf8,0x51,0xc0]2491; AVX512-NEXT:    ret{{[l|q]}} # encoding: [0xc3]2492  %res = call <4 x float> @llvm.sqrt.v4f32(<4 x float> %a0)2493  ret <4 x float> %res2494}2495declare <4 x float> @llvm.sqrt.v4f32(<4 x float>) nounwind readnone2496 2497define <4 x float> @test_mm_sqrt_ss(<4 x float> %a0) {2498; SSE-LABEL: test_mm_sqrt_ss:2499; SSE:       # %bb.0:2500; SSE-NEXT:    sqrtss %xmm0, %xmm0 # encoding: [0xf3,0x0f,0x51,0xc0]2501; SSE-NEXT:    ret{{[l|q]}} # encoding: [0xc3]2502;2503; AVX1-LABEL: test_mm_sqrt_ss:2504; AVX1:       # %bb.0:2505; AVX1-NEXT:    vsqrtss %xmm0, %xmm0, %xmm0 # encoding: [0xc5,0xfa,0x51,0xc0]2506; AVX1-NEXT:    ret{{[l|q]}} # encoding: [0xc3]2507;2508; AVX512-LABEL: test_mm_sqrt_ss:2509; AVX512:       # %bb.0:2510; AVX512-NEXT:    vsqrtss %xmm0, %xmm0, %xmm0 # EVEX TO VEX Compression encoding: [0xc5,0xfa,0x51,0xc0]2511; AVX512-NEXT:    ret{{[l|q]}} # encoding: [0xc3]2512  %ext = extractelement <4 x float> %a0, i32 02513  %sqrt = call float @llvm.sqrt.f32(float %ext)2514  %ins = insertelement <4 x float> %a0, float %sqrt, i32 02515  ret <4 x float> %ins2516}2517declare float @llvm.sqrt.f32(float) nounwind readnone2518 2519define float @test_mm_sqrt_ss_scalar(float %a0) {2520; X86-SSE-LABEL: test_mm_sqrt_ss_scalar:2521; X86-SSE:       # %bb.0:2522; X86-SSE-NEXT:    pushl %eax # encoding: [0x50]2523; X86-SSE-NEXT:    .cfi_def_cfa_offset 82524; X86-SSE-NEXT:    movss {{.*#+}} xmm0 = mem[0],zero,zero,zero2525; X86-SSE-NEXT:    # encoding: [0xf3,0x0f,0x10,0x44,0x24,0x08]2526; X86-SSE-NEXT:    sqrtss %xmm0, %xmm0 # encoding: [0xf3,0x0f,0x51,0xc0]2527; X86-SSE-NEXT:    movss %xmm0, (%esp) # encoding: [0xf3,0x0f,0x11,0x04,0x24]2528; X86-SSE-NEXT:    flds (%esp) # encoding: [0xd9,0x04,0x24]2529; X86-SSE-NEXT:    popl %eax # encoding: [0x58]2530; X86-SSE-NEXT:    .cfi_def_cfa_offset 42531; X86-SSE-NEXT:    retl # encoding: [0xc3]2532;2533; X86-AVX1-LABEL: test_mm_sqrt_ss_scalar:2534; X86-AVX1:       # %bb.0:2535; X86-AVX1-NEXT:    pushl %eax # encoding: [0x50]2536; X86-AVX1-NEXT:    .cfi_def_cfa_offset 82537; X86-AVX1-NEXT:    vmovss {{.*#+}} xmm0 = mem[0],zero,zero,zero2538; X86-AVX1-NEXT:    # encoding: [0xc5,0xfa,0x10,0x44,0x24,0x08]2539; X86-AVX1-NEXT:    vsqrtss %xmm0, %xmm0, %xmm0 # encoding: [0xc5,0xfa,0x51,0xc0]2540; X86-AVX1-NEXT:    vmovss %xmm0, (%esp) # encoding: [0xc5,0xfa,0x11,0x04,0x24]2541; X86-AVX1-NEXT:    flds (%esp) # encoding: [0xd9,0x04,0x24]2542; X86-AVX1-NEXT:    popl %eax # encoding: [0x58]2543; X86-AVX1-NEXT:    .cfi_def_cfa_offset 42544; X86-AVX1-NEXT:    retl # encoding: [0xc3]2545;2546; X86-AVX512-LABEL: test_mm_sqrt_ss_scalar:2547; X86-AVX512:       # %bb.0:2548; X86-AVX512-NEXT:    pushl %eax # encoding: [0x50]2549; X86-AVX512-NEXT:    .cfi_def_cfa_offset 82550; X86-AVX512-NEXT:    vmovss {{.*#+}} xmm0 = mem[0],zero,zero,zero2551; X86-AVX512-NEXT:    # EVEX TO VEX Compression encoding: [0xc5,0xfa,0x10,0x44,0x24,0x08]2552; X86-AVX512-NEXT:    vsqrtss %xmm0, %xmm0, %xmm0 # EVEX TO VEX Compression encoding: [0xc5,0xfa,0x51,0xc0]2553; X86-AVX512-NEXT:    vmovss %xmm0, (%esp) # EVEX TO VEX Compression encoding: [0xc5,0xfa,0x11,0x04,0x24]2554; X86-AVX512-NEXT:    flds (%esp) # encoding: [0xd9,0x04,0x24]2555; X86-AVX512-NEXT:    popl %eax # encoding: [0x58]2556; X86-AVX512-NEXT:    .cfi_def_cfa_offset 42557; X86-AVX512-NEXT:    retl # encoding: [0xc3]2558;2559; X64-SSE-LABEL: test_mm_sqrt_ss_scalar:2560; X64-SSE:       # %bb.0:2561; X64-SSE-NEXT:    sqrtss %xmm0, %xmm0 # encoding: [0xf3,0x0f,0x51,0xc0]2562; X64-SSE-NEXT:    retq # encoding: [0xc3]2563;2564; X64-AVX1-LABEL: test_mm_sqrt_ss_scalar:2565; X64-AVX1:       # %bb.0:2566; X64-AVX1-NEXT:    vsqrtss %xmm0, %xmm0, %xmm0 # encoding: [0xc5,0xfa,0x51,0xc0]2567; X64-AVX1-NEXT:    retq # encoding: [0xc3]2568;2569; X64-AVX512-LABEL: test_mm_sqrt_ss_scalar:2570; X64-AVX512:       # %bb.0:2571; X64-AVX512-NEXT:    vsqrtss %xmm0, %xmm0, %xmm0 # EVEX TO VEX Compression encoding: [0xc5,0xfa,0x51,0xc0]2572; X64-AVX512-NEXT:    retq # encoding: [0xc3]2573  %sqrt = call float @llvm.sqrt.f32(float %a0)2574  ret float %sqrt2575}2576 2577define void @test_mm_store_ps(ptr %a0, <4 x float> %a1) {2578; X86-SSE-LABEL: test_mm_store_ps:2579; X86-SSE:       # %bb.0:2580; X86-SSE-NEXT:    movl {{[0-9]+}}(%esp), %eax # encoding: [0x8b,0x44,0x24,0x04]2581; X86-SSE-NEXT:    movaps %xmm0, (%eax) # encoding: [0x0f,0x29,0x00]2582; X86-SSE-NEXT:    retl # encoding: [0xc3]2583;2584; X86-AVX1-LABEL: test_mm_store_ps:2585; X86-AVX1:       # %bb.0:2586; X86-AVX1-NEXT:    movl {{[0-9]+}}(%esp), %eax # encoding: [0x8b,0x44,0x24,0x04]2587; X86-AVX1-NEXT:    vmovaps %xmm0, (%eax) # encoding: [0xc5,0xf8,0x29,0x00]2588; X86-AVX1-NEXT:    retl # encoding: [0xc3]2589;2590; X86-AVX512-LABEL: test_mm_store_ps:2591; X86-AVX512:       # %bb.0:2592; X86-AVX512-NEXT:    movl {{[0-9]+}}(%esp), %eax # encoding: [0x8b,0x44,0x24,0x04]2593; X86-AVX512-NEXT:    vmovaps %xmm0, (%eax) # EVEX TO VEX Compression encoding: [0xc5,0xf8,0x29,0x00]2594; X86-AVX512-NEXT:    retl # encoding: [0xc3]2595;2596; X64-SSE-LABEL: test_mm_store_ps:2597; X64-SSE:       # %bb.0:2598; X64-SSE-NEXT:    movaps %xmm0, (%rdi) # encoding: [0x0f,0x29,0x07]2599; X64-SSE-NEXT:    retq # encoding: [0xc3]2600;2601; X64-AVX1-LABEL: test_mm_store_ps:2602; X64-AVX1:       # %bb.0:2603; X64-AVX1-NEXT:    vmovaps %xmm0, (%rdi) # encoding: [0xc5,0xf8,0x29,0x07]2604; X64-AVX1-NEXT:    retq # encoding: [0xc3]2605;2606; X64-AVX512-LABEL: test_mm_store_ps:2607; X64-AVX512:       # %bb.0:2608; X64-AVX512-NEXT:    vmovaps %xmm0, (%rdi) # EVEX TO VEX Compression encoding: [0xc5,0xf8,0x29,0x07]2609; X64-AVX512-NEXT:    retq # encoding: [0xc3]2610  %arg0 = bitcast ptr %a0 to ptr2611  store <4 x float> %a1, ptr %arg0, align 162612  ret void2613}2614 2615define void @test_mm_store_ps1(ptr %a0, <4 x float> %a1) {2616; X86-SSE-LABEL: test_mm_store_ps1:2617; X86-SSE:       # %bb.0:2618; X86-SSE-NEXT:    movl {{[0-9]+}}(%esp), %eax # encoding: [0x8b,0x44,0x24,0x04]2619; X86-SSE-NEXT:    shufps $0, %xmm0, %xmm0 # encoding: [0x0f,0xc6,0xc0,0x00]2620; X86-SSE-NEXT:    # xmm0 = xmm0[0,0,0,0]2621; X86-SSE-NEXT:    movaps %xmm0, (%eax) # encoding: [0x0f,0x29,0x00]2622; X86-SSE-NEXT:    retl # encoding: [0xc3]2623;2624; X86-AVX1-LABEL: test_mm_store_ps1:2625; X86-AVX1:       # %bb.0:2626; X86-AVX1-NEXT:    movl {{[0-9]+}}(%esp), %eax # encoding: [0x8b,0x44,0x24,0x04]2627; X86-AVX1-NEXT:    vshufps $0, %xmm0, %xmm0, %xmm0 # encoding: [0xc5,0xf8,0xc6,0xc0,0x00]2628; X86-AVX1-NEXT:    # xmm0 = xmm0[0,0,0,0]2629; X86-AVX1-NEXT:    vmovaps %xmm0, (%eax) # encoding: [0xc5,0xf8,0x29,0x00]2630; X86-AVX1-NEXT:    retl # encoding: [0xc3]2631;2632; X86-AVX512-LABEL: test_mm_store_ps1:2633; X86-AVX512:       # %bb.0:2634; X86-AVX512-NEXT:    movl {{[0-9]+}}(%esp), %eax # encoding: [0x8b,0x44,0x24,0x04]2635; X86-AVX512-NEXT:    vbroadcastss %xmm0, %xmm0 # EVEX TO VEX Compression encoding: [0xc4,0xe2,0x79,0x18,0xc0]2636; X86-AVX512-NEXT:    vmovaps %xmm0, (%eax) # EVEX TO VEX Compression encoding: [0xc5,0xf8,0x29,0x00]2637; X86-AVX512-NEXT:    retl # encoding: [0xc3]2638;2639; X64-SSE-LABEL: test_mm_store_ps1:2640; X64-SSE:       # %bb.0:2641; X64-SSE-NEXT:    shufps $0, %xmm0, %xmm0 # encoding: [0x0f,0xc6,0xc0,0x00]2642; X64-SSE-NEXT:    # xmm0 = xmm0[0,0,0,0]2643; X64-SSE-NEXT:    movaps %xmm0, (%rdi) # encoding: [0x0f,0x29,0x07]2644; X64-SSE-NEXT:    retq # encoding: [0xc3]2645;2646; X64-AVX1-LABEL: test_mm_store_ps1:2647; X64-AVX1:       # %bb.0:2648; X64-AVX1-NEXT:    vshufps $0, %xmm0, %xmm0, %xmm0 # encoding: [0xc5,0xf8,0xc6,0xc0,0x00]2649; X64-AVX1-NEXT:    # xmm0 = xmm0[0,0,0,0]2650; X64-AVX1-NEXT:    vmovaps %xmm0, (%rdi) # encoding: [0xc5,0xf8,0x29,0x07]2651; X64-AVX1-NEXT:    retq # encoding: [0xc3]2652;2653; X64-AVX512-LABEL: test_mm_store_ps1:2654; X64-AVX512:       # %bb.0:2655; X64-AVX512-NEXT:    vbroadcastss %xmm0, %xmm0 # EVEX TO VEX Compression encoding: [0xc4,0xe2,0x79,0x18,0xc0]2656; X64-AVX512-NEXT:    vmovaps %xmm0, (%rdi) # EVEX TO VEX Compression encoding: [0xc5,0xf8,0x29,0x07]2657; X64-AVX512-NEXT:    retq # encoding: [0xc3]2658  %arg0 = bitcast ptr %a0 to ptr2659  %shuf = shufflevector <4 x float> %a1, <4 x float> undef, <4 x i32> zeroinitializer2660  store <4 x float> %shuf, ptr %arg0, align 162661  ret void2662}2663 2664define void @test_mm_store_ss(ptr %a0, <4 x float> %a1) {2665; X86-SSE-LABEL: test_mm_store_ss:2666; X86-SSE:       # %bb.0:2667; X86-SSE-NEXT:    movl {{[0-9]+}}(%esp), %eax # encoding: [0x8b,0x44,0x24,0x04]2668; X86-SSE-NEXT:    movss %xmm0, (%eax) # encoding: [0xf3,0x0f,0x11,0x00]2669; X86-SSE-NEXT:    retl # encoding: [0xc3]2670;2671; X86-AVX1-LABEL: test_mm_store_ss:2672; X86-AVX1:       # %bb.0:2673; X86-AVX1-NEXT:    movl {{[0-9]+}}(%esp), %eax # encoding: [0x8b,0x44,0x24,0x04]2674; X86-AVX1-NEXT:    vmovss %xmm0, (%eax) # encoding: [0xc5,0xfa,0x11,0x00]2675; X86-AVX1-NEXT:    retl # encoding: [0xc3]2676;2677; X86-AVX512-LABEL: test_mm_store_ss:2678; X86-AVX512:       # %bb.0:2679; X86-AVX512-NEXT:    movl {{[0-9]+}}(%esp), %eax # encoding: [0x8b,0x44,0x24,0x04]2680; X86-AVX512-NEXT:    vmovss %xmm0, (%eax) # EVEX TO VEX Compression encoding: [0xc5,0xfa,0x11,0x00]2681; X86-AVX512-NEXT:    retl # encoding: [0xc3]2682;2683; X64-SSE-LABEL: test_mm_store_ss:2684; X64-SSE:       # %bb.0:2685; X64-SSE-NEXT:    movss %xmm0, (%rdi) # encoding: [0xf3,0x0f,0x11,0x07]2686; X64-SSE-NEXT:    retq # encoding: [0xc3]2687;2688; X64-AVX1-LABEL: test_mm_store_ss:2689; X64-AVX1:       # %bb.0:2690; X64-AVX1-NEXT:    vmovss %xmm0, (%rdi) # encoding: [0xc5,0xfa,0x11,0x07]2691; X64-AVX1-NEXT:    retq # encoding: [0xc3]2692;2693; X64-AVX512-LABEL: test_mm_store_ss:2694; X64-AVX512:       # %bb.0:2695; X64-AVX512-NEXT:    vmovss %xmm0, (%rdi) # EVEX TO VEX Compression encoding: [0xc5,0xfa,0x11,0x07]2696; X64-AVX512-NEXT:    retq # encoding: [0xc3]2697  %ext = extractelement <4 x float> %a1, i32 02698  store float %ext, ptr %a0, align 12699  ret void2700}2701 2702define void @test_mm_store1_ps(ptr %a0, <4 x float> %a1) {2703; X86-SSE-LABEL: test_mm_store1_ps:2704; X86-SSE:       # %bb.0:2705; X86-SSE-NEXT:    movl {{[0-9]+}}(%esp), %eax # encoding: [0x8b,0x44,0x24,0x04]2706; X86-SSE-NEXT:    shufps $0, %xmm0, %xmm0 # encoding: [0x0f,0xc6,0xc0,0x00]2707; X86-SSE-NEXT:    # xmm0 = xmm0[0,0,0,0]2708; X86-SSE-NEXT:    movaps %xmm0, (%eax) # encoding: [0x0f,0x29,0x00]2709; X86-SSE-NEXT:    retl # encoding: [0xc3]2710;2711; X86-AVX1-LABEL: test_mm_store1_ps:2712; X86-AVX1:       # %bb.0:2713; X86-AVX1-NEXT:    movl {{[0-9]+}}(%esp), %eax # encoding: [0x8b,0x44,0x24,0x04]2714; X86-AVX1-NEXT:    vshufps $0, %xmm0, %xmm0, %xmm0 # encoding: [0xc5,0xf8,0xc6,0xc0,0x00]2715; X86-AVX1-NEXT:    # xmm0 = xmm0[0,0,0,0]2716; X86-AVX1-NEXT:    vmovaps %xmm0, (%eax) # encoding: [0xc5,0xf8,0x29,0x00]2717; X86-AVX1-NEXT:    retl # encoding: [0xc3]2718;2719; X86-AVX512-LABEL: test_mm_store1_ps:2720; X86-AVX512:       # %bb.0:2721; X86-AVX512-NEXT:    movl {{[0-9]+}}(%esp), %eax # encoding: [0x8b,0x44,0x24,0x04]2722; X86-AVX512-NEXT:    vbroadcastss %xmm0, %xmm0 # EVEX TO VEX Compression encoding: [0xc4,0xe2,0x79,0x18,0xc0]2723; X86-AVX512-NEXT:    vmovaps %xmm0, (%eax) # EVEX TO VEX Compression encoding: [0xc5,0xf8,0x29,0x00]2724; X86-AVX512-NEXT:    retl # encoding: [0xc3]2725;2726; X64-SSE-LABEL: test_mm_store1_ps:2727; X64-SSE:       # %bb.0:2728; X64-SSE-NEXT:    shufps $0, %xmm0, %xmm0 # encoding: [0x0f,0xc6,0xc0,0x00]2729; X64-SSE-NEXT:    # xmm0 = xmm0[0,0,0,0]2730; X64-SSE-NEXT:    movaps %xmm0, (%rdi) # encoding: [0x0f,0x29,0x07]2731; X64-SSE-NEXT:    retq # encoding: [0xc3]2732;2733; X64-AVX1-LABEL: test_mm_store1_ps:2734; X64-AVX1:       # %bb.0:2735; X64-AVX1-NEXT:    vshufps $0, %xmm0, %xmm0, %xmm0 # encoding: [0xc5,0xf8,0xc6,0xc0,0x00]2736; X64-AVX1-NEXT:    # xmm0 = xmm0[0,0,0,0]2737; X64-AVX1-NEXT:    vmovaps %xmm0, (%rdi) # encoding: [0xc5,0xf8,0x29,0x07]2738; X64-AVX1-NEXT:    retq # encoding: [0xc3]2739;2740; X64-AVX512-LABEL: test_mm_store1_ps:2741; X64-AVX512:       # %bb.0:2742; X64-AVX512-NEXT:    vbroadcastss %xmm0, %xmm0 # EVEX TO VEX Compression encoding: [0xc4,0xe2,0x79,0x18,0xc0]2743; X64-AVX512-NEXT:    vmovaps %xmm0, (%rdi) # EVEX TO VEX Compression encoding: [0xc5,0xf8,0x29,0x07]2744; X64-AVX512-NEXT:    retq # encoding: [0xc3]2745  %arg0 = bitcast ptr %a0 to ptr2746  %shuf = shufflevector <4 x float> %a1, <4 x float> undef, <4 x i32> zeroinitializer2747  store <4 x float> %shuf, ptr %arg0, align 162748  ret void2749}2750 2751define void @test_mm_storeh_pi(ptr %a0, <4 x float> %a1) nounwind {2752; X86-SSE1-LABEL: test_mm_storeh_pi:2753; X86-SSE1:       # %bb.0:2754; X86-SSE1-NEXT:    pushl %ebp # encoding: [0x55]2755; X86-SSE1-NEXT:    movl %esp, %ebp # encoding: [0x89,0xe5]2756; X86-SSE1-NEXT:    andl $-16, %esp # encoding: [0x83,0xe4,0xf0]2757; X86-SSE1-NEXT:    subl $32, %esp # encoding: [0x83,0xec,0x20]2758; X86-SSE1-NEXT:    movl 8(%ebp), %eax # encoding: [0x8b,0x45,0x08]2759; X86-SSE1-NEXT:    movaps %xmm0, (%esp) # encoding: [0x0f,0x29,0x04,0x24]2760; X86-SSE1-NEXT:    movl {{[0-9]+}}(%esp), %ecx # encoding: [0x8b,0x4c,0x24,0x08]2761; X86-SSE1-NEXT:    movl {{[0-9]+}}(%esp), %edx # encoding: [0x8b,0x54,0x24,0x0c]2762; X86-SSE1-NEXT:    movl %edx, 4(%eax) # encoding: [0x89,0x50,0x04]2763; X86-SSE1-NEXT:    movl %ecx, (%eax) # encoding: [0x89,0x08]2764; X86-SSE1-NEXT:    movl %ebp, %esp # encoding: [0x89,0xec]2765; X86-SSE1-NEXT:    popl %ebp # encoding: [0x5d]2766; X86-SSE1-NEXT:    retl # encoding: [0xc3]2767;2768; X86-SSE2-LABEL: test_mm_storeh_pi:2769; X86-SSE2:       # %bb.0:2770; X86-SSE2-NEXT:    movl {{[0-9]+}}(%esp), %eax # encoding: [0x8b,0x44,0x24,0x04]2771; X86-SSE2-NEXT:    movhps %xmm0, (%eax) # encoding: [0x0f,0x17,0x00]2772; X86-SSE2-NEXT:    retl # encoding: [0xc3]2773;2774; X86-AVX1-LABEL: test_mm_storeh_pi:2775; X86-AVX1:       # %bb.0:2776; X86-AVX1-NEXT:    movl {{[0-9]+}}(%esp), %eax # encoding: [0x8b,0x44,0x24,0x04]2777; X86-AVX1-NEXT:    vmovhps %xmm0, (%eax) # encoding: [0xc5,0xf8,0x17,0x00]2778; X86-AVX1-NEXT:    retl # encoding: [0xc3]2779;2780; X86-AVX512-LABEL: test_mm_storeh_pi:2781; X86-AVX512:       # %bb.0:2782; X86-AVX512-NEXT:    movl {{[0-9]+}}(%esp), %eax # encoding: [0x8b,0x44,0x24,0x04]2783; X86-AVX512-NEXT:    vmovhps %xmm0, (%eax) # EVEX TO VEX Compression encoding: [0xc5,0xf8,0x17,0x00]2784; X86-AVX512-NEXT:    retl # encoding: [0xc3]2785;2786; X64-SSE1-LABEL: test_mm_storeh_pi:2787; X64-SSE1:       # %bb.0:2788; X64-SSE1-NEXT:    movaps %xmm0, -{{[0-9]+}}(%rsp) # encoding: [0x0f,0x29,0x44,0x24,0xe8]2789; X64-SSE1-NEXT:    movq -{{[0-9]+}}(%rsp), %rax # encoding: [0x48,0x8b,0x44,0x24,0xf0]2790; X64-SSE1-NEXT:    movq %rax, (%rdi) # encoding: [0x48,0x89,0x07]2791; X64-SSE1-NEXT:    retq # encoding: [0xc3]2792;2793; X64-SSE2-LABEL: test_mm_storeh_pi:2794; X64-SSE2:       # %bb.0:2795; X64-SSE2-NEXT:    punpckhqdq %xmm0, %xmm0 # encoding: [0x66,0x0f,0x6d,0xc0]2796; X64-SSE2-NEXT:    # xmm0 = xmm0[1,1]2797; X64-SSE2-NEXT:    movq %xmm0, %rax # encoding: [0x66,0x48,0x0f,0x7e,0xc0]2798; X64-SSE2-NEXT:    movq %rax, (%rdi) # encoding: [0x48,0x89,0x07]2799; X64-SSE2-NEXT:    retq # encoding: [0xc3]2800;2801; X64-AVX1-LABEL: test_mm_storeh_pi:2802; X64-AVX1:       # %bb.0:2803; X64-AVX1-NEXT:    vpextrq $1, %xmm0, %rax # encoding: [0xc4,0xe3,0xf9,0x16,0xc0,0x01]2804; X64-AVX1-NEXT:    movq %rax, (%rdi) # encoding: [0x48,0x89,0x07]2805; X64-AVX1-NEXT:    retq # encoding: [0xc3]2806;2807; X64-AVX512-LABEL: test_mm_storeh_pi:2808; X64-AVX512:       # %bb.0:2809; X64-AVX512-NEXT:    vpextrq $1, %xmm0, %rax # EVEX TO VEX Compression encoding: [0xc4,0xe3,0xf9,0x16,0xc0,0x01]2810; X64-AVX512-NEXT:    movq %rax, (%rdi) # encoding: [0x48,0x89,0x07]2811; X64-AVX512-NEXT:    retq # encoding: [0xc3]2812  %ptr = bitcast ptr %a0 to ptr2813  %bc  = bitcast <4 x float> %a1 to <2 x i64>2814  %ext = extractelement <2 x i64> %bc, i32 12815  store i64 %ext, ptr %ptr2816  ret void2817}2818 2819define void @test_mm_storeh_pi2(ptr %a0, <4 x float> %a1) nounwind {2820; X86-SSE-LABEL: test_mm_storeh_pi2:2821; X86-SSE:       # %bb.0:2822; X86-SSE-NEXT:    movl {{[0-9]+}}(%esp), %eax # encoding: [0x8b,0x44,0x24,0x04]2823; X86-SSE-NEXT:    movhps %xmm0, (%eax) # encoding: [0x0f,0x17,0x00]2824; X86-SSE-NEXT:    retl # encoding: [0xc3]2825;2826; X86-AVX1-LABEL: test_mm_storeh_pi2:2827; X86-AVX1:       # %bb.0:2828; X86-AVX1-NEXT:    movl {{[0-9]+}}(%esp), %eax # encoding: [0x8b,0x44,0x24,0x04]2829; X86-AVX1-NEXT:    vmovhps %xmm0, (%eax) # encoding: [0xc5,0xf8,0x17,0x00]2830; X86-AVX1-NEXT:    retl # encoding: [0xc3]2831;2832; X86-AVX512-LABEL: test_mm_storeh_pi2:2833; X86-AVX512:       # %bb.0:2834; X86-AVX512-NEXT:    movl {{[0-9]+}}(%esp), %eax # encoding: [0x8b,0x44,0x24,0x04]2835; X86-AVX512-NEXT:    vmovhps %xmm0, (%eax) # EVEX TO VEX Compression encoding: [0xc5,0xf8,0x17,0x00]2836; X86-AVX512-NEXT:    retl # encoding: [0xc3]2837;2838; X64-SSE-LABEL: test_mm_storeh_pi2:2839; X64-SSE:       # %bb.0:2840; X64-SSE-NEXT:    movhps %xmm0, (%rdi) # encoding: [0x0f,0x17,0x07]2841; X64-SSE-NEXT:    retq # encoding: [0xc3]2842;2843; X64-AVX1-LABEL: test_mm_storeh_pi2:2844; X64-AVX1:       # %bb.0:2845; X64-AVX1-NEXT:    vmovhps %xmm0, (%rdi) # encoding: [0xc5,0xf8,0x17,0x07]2846; X64-AVX1-NEXT:    retq # encoding: [0xc3]2847;2848; X64-AVX512-LABEL: test_mm_storeh_pi2:2849; X64-AVX512:       # %bb.0:2850; X64-AVX512-NEXT:    vmovhps %xmm0, (%rdi) # EVEX TO VEX Compression encoding: [0xc5,0xf8,0x17,0x07]2851; X64-AVX512-NEXT:    retq # encoding: [0xc3]2852  %ptr = bitcast ptr %a0 to ptr2853  %ext = shufflevector <4 x float> %a1, <4 x float> undef, <2 x i32> <i32 2, i32 3>2854  store <2 x float> %ext, ptr %ptr2855  ret void2856}2857 2858define void @test_mm_storel_pi(ptr %a0, <4 x float> %a1) nounwind {2859; X86-SSE1-LABEL: test_mm_storel_pi:2860; X86-SSE1:       # %bb.0:2861; X86-SSE1-NEXT:    pushl %ebp # encoding: [0x55]2862; X86-SSE1-NEXT:    movl %esp, %ebp # encoding: [0x89,0xe5]2863; X86-SSE1-NEXT:    andl $-16, %esp # encoding: [0x83,0xe4,0xf0]2864; X86-SSE1-NEXT:    subl $32, %esp # encoding: [0x83,0xec,0x20]2865; X86-SSE1-NEXT:    movl 8(%ebp), %eax # encoding: [0x8b,0x45,0x08]2866; X86-SSE1-NEXT:    movaps %xmm0, (%esp) # encoding: [0x0f,0x29,0x04,0x24]2867; X86-SSE1-NEXT:    movl (%esp), %ecx # encoding: [0x8b,0x0c,0x24]2868; X86-SSE1-NEXT:    movl {{[0-9]+}}(%esp), %edx # encoding: [0x8b,0x54,0x24,0x04]2869; X86-SSE1-NEXT:    movl %edx, 4(%eax) # encoding: [0x89,0x50,0x04]2870; X86-SSE1-NEXT:    movl %ecx, (%eax) # encoding: [0x89,0x08]2871; X86-SSE1-NEXT:    movl %ebp, %esp # encoding: [0x89,0xec]2872; X86-SSE1-NEXT:    popl %ebp # encoding: [0x5d]2873; X86-SSE1-NEXT:    retl # encoding: [0xc3]2874;2875; X86-SSE2-LABEL: test_mm_storel_pi:2876; X86-SSE2:       # %bb.0:2877; X86-SSE2-NEXT:    movl {{[0-9]+}}(%esp), %eax # encoding: [0x8b,0x44,0x24,0x04]2878; X86-SSE2-NEXT:    movlps %xmm0, (%eax) # encoding: [0x0f,0x13,0x00]2879; X86-SSE2-NEXT:    retl # encoding: [0xc3]2880;2881; X86-AVX1-LABEL: test_mm_storel_pi:2882; X86-AVX1:       # %bb.0:2883; X86-AVX1-NEXT:    movl {{[0-9]+}}(%esp), %eax # encoding: [0x8b,0x44,0x24,0x04]2884; X86-AVX1-NEXT:    vmovlps %xmm0, (%eax) # encoding: [0xc5,0xf8,0x13,0x00]2885; X86-AVX1-NEXT:    retl # encoding: [0xc3]2886;2887; X86-AVX512-LABEL: test_mm_storel_pi:2888; X86-AVX512:       # %bb.0:2889; X86-AVX512-NEXT:    movl {{[0-9]+}}(%esp), %eax # encoding: [0x8b,0x44,0x24,0x04]2890; X86-AVX512-NEXT:    vmovlps %xmm0, (%eax) # EVEX TO VEX Compression encoding: [0xc5,0xf8,0x13,0x00]2891; X86-AVX512-NEXT:    retl # encoding: [0xc3]2892;2893; X64-SSE1-LABEL: test_mm_storel_pi:2894; X64-SSE1:       # %bb.0:2895; X64-SSE1-NEXT:    movaps %xmm0, -{{[0-9]+}}(%rsp) # encoding: [0x0f,0x29,0x44,0x24,0xe8]2896; X64-SSE1-NEXT:    movq -{{[0-9]+}}(%rsp), %rax # encoding: [0x48,0x8b,0x44,0x24,0xe8]2897; X64-SSE1-NEXT:    movq %rax, (%rdi) # encoding: [0x48,0x89,0x07]2898; X64-SSE1-NEXT:    retq # encoding: [0xc3]2899;2900; X64-SSE2-LABEL: test_mm_storel_pi:2901; X64-SSE2:       # %bb.0:2902; X64-SSE2-NEXT:    movq %xmm0, %rax # encoding: [0x66,0x48,0x0f,0x7e,0xc0]2903; X64-SSE2-NEXT:    movq %rax, (%rdi) # encoding: [0x48,0x89,0x07]2904; X64-SSE2-NEXT:    retq # encoding: [0xc3]2905;2906; X64-AVX1-LABEL: test_mm_storel_pi:2907; X64-AVX1:       # %bb.0:2908; X64-AVX1-NEXT:    vmovq %xmm0, %rax # encoding: [0xc4,0xe1,0xf9,0x7e,0xc0]2909; X64-AVX1-NEXT:    movq %rax, (%rdi) # encoding: [0x48,0x89,0x07]2910; X64-AVX1-NEXT:    retq # encoding: [0xc3]2911;2912; X64-AVX512-LABEL: test_mm_storel_pi:2913; X64-AVX512:       # %bb.0:2914; X64-AVX512-NEXT:    vmovq %xmm0, %rax # EVEX TO VEX Compression encoding: [0xc4,0xe1,0xf9,0x7e,0xc0]2915; X64-AVX512-NEXT:    movq %rax, (%rdi) # encoding: [0x48,0x89,0x07]2916; X64-AVX512-NEXT:    retq # encoding: [0xc3]2917  %ptr = bitcast ptr %a0 to ptr2918  %bc  = bitcast <4 x float> %a1 to <2 x i64>2919  %ext = extractelement <2 x i64> %bc, i32 02920  store i64 %ext, ptr %ptr2921  ret void2922}2923 2924; FIXME: Switch the frontend to use this code.2925define void @test_mm_storel_pi2(ptr %a0, <4 x float> %a1) nounwind {2926; X86-SSE-LABEL: test_mm_storel_pi2:2927; X86-SSE:       # %bb.0:2928; X86-SSE-NEXT:    movl {{[0-9]+}}(%esp), %eax # encoding: [0x8b,0x44,0x24,0x04]2929; X86-SSE-NEXT:    movlps %xmm0, (%eax) # encoding: [0x0f,0x13,0x00]2930; X86-SSE-NEXT:    retl # encoding: [0xc3]2931;2932; X86-AVX1-LABEL: test_mm_storel_pi2:2933; X86-AVX1:       # %bb.0:2934; X86-AVX1-NEXT:    movl {{[0-9]+}}(%esp), %eax # encoding: [0x8b,0x44,0x24,0x04]2935; X86-AVX1-NEXT:    vmovlps %xmm0, (%eax) # encoding: [0xc5,0xf8,0x13,0x00]2936; X86-AVX1-NEXT:    retl # encoding: [0xc3]2937;2938; X86-AVX512-LABEL: test_mm_storel_pi2:2939; X86-AVX512:       # %bb.0:2940; X86-AVX512-NEXT:    movl {{[0-9]+}}(%esp), %eax # encoding: [0x8b,0x44,0x24,0x04]2941; X86-AVX512-NEXT:    vmovlps %xmm0, (%eax) # EVEX TO VEX Compression encoding: [0xc5,0xf8,0x13,0x00]2942; X86-AVX512-NEXT:    retl # encoding: [0xc3]2943;2944; X64-SSE-LABEL: test_mm_storel_pi2:2945; X64-SSE:       # %bb.0:2946; X64-SSE-NEXT:    movlps %xmm0, (%rdi) # encoding: [0x0f,0x13,0x07]2947; X64-SSE-NEXT:    retq # encoding: [0xc3]2948;2949; X64-AVX1-LABEL: test_mm_storel_pi2:2950; X64-AVX1:       # %bb.0:2951; X64-AVX1-NEXT:    vmovlps %xmm0, (%rdi) # encoding: [0xc5,0xf8,0x13,0x07]2952; X64-AVX1-NEXT:    retq # encoding: [0xc3]2953;2954; X64-AVX512-LABEL: test_mm_storel_pi2:2955; X64-AVX512:       # %bb.0:2956; X64-AVX512-NEXT:    vmovlps %xmm0, (%rdi) # EVEX TO VEX Compression encoding: [0xc5,0xf8,0x13,0x07]2957; X64-AVX512-NEXT:    retq # encoding: [0xc3]2958  %ptr = bitcast ptr %a0 to ptr2959  %ext = shufflevector <4 x float> %a1, <4 x float> undef, <2 x i32> <i32 0, i32 1>2960  store <2 x float> %ext, ptr %ptr2961  ret void2962}2963 2964define void @test_mm_storer_ps(ptr %a0, <4 x float> %a1) {2965; X86-SSE-LABEL: test_mm_storer_ps:2966; X86-SSE:       # %bb.0:2967; X86-SSE-NEXT:    movl {{[0-9]+}}(%esp), %eax # encoding: [0x8b,0x44,0x24,0x04]2968; X86-SSE-NEXT:    shufps $27, %xmm0, %xmm0 # encoding: [0x0f,0xc6,0xc0,0x1b]2969; X86-SSE-NEXT:    # xmm0 = xmm0[3,2,1,0]2970; X86-SSE-NEXT:    movaps %xmm0, (%eax) # encoding: [0x0f,0x29,0x00]2971; X86-SSE-NEXT:    retl # encoding: [0xc3]2972;2973; X86-AVX1-LABEL: test_mm_storer_ps:2974; X86-AVX1:       # %bb.0:2975; X86-AVX1-NEXT:    movl {{[0-9]+}}(%esp), %eax # encoding: [0x8b,0x44,0x24,0x04]2976; X86-AVX1-NEXT:    vshufps $27, %xmm0, %xmm0, %xmm0 # encoding: [0xc5,0xf8,0xc6,0xc0,0x1b]2977; X86-AVX1-NEXT:    # xmm0 = xmm0[3,2,1,0]2978; X86-AVX1-NEXT:    vmovaps %xmm0, (%eax) # encoding: [0xc5,0xf8,0x29,0x00]2979; X86-AVX1-NEXT:    retl # encoding: [0xc3]2980;2981; X86-AVX512-LABEL: test_mm_storer_ps:2982; X86-AVX512:       # %bb.0:2983; X86-AVX512-NEXT:    movl {{[0-9]+}}(%esp), %eax # encoding: [0x8b,0x44,0x24,0x04]2984; X86-AVX512-NEXT:    vshufps $27, %xmm0, %xmm0, %xmm0 # EVEX TO VEX Compression encoding: [0xc5,0xf8,0xc6,0xc0,0x1b]2985; X86-AVX512-NEXT:    # xmm0 = xmm0[3,2,1,0]2986; X86-AVX512-NEXT:    vmovaps %xmm0, (%eax) # EVEX TO VEX Compression encoding: [0xc5,0xf8,0x29,0x00]2987; X86-AVX512-NEXT:    retl # encoding: [0xc3]2988;2989; X64-SSE-LABEL: test_mm_storer_ps:2990; X64-SSE:       # %bb.0:2991; X64-SSE-NEXT:    shufps $27, %xmm0, %xmm0 # encoding: [0x0f,0xc6,0xc0,0x1b]2992; X64-SSE-NEXT:    # xmm0 = xmm0[3,2,1,0]2993; X64-SSE-NEXT:    movaps %xmm0, (%rdi) # encoding: [0x0f,0x29,0x07]2994; X64-SSE-NEXT:    retq # encoding: [0xc3]2995;2996; X64-AVX1-LABEL: test_mm_storer_ps:2997; X64-AVX1:       # %bb.0:2998; X64-AVX1-NEXT:    vshufps $27, %xmm0, %xmm0, %xmm0 # encoding: [0xc5,0xf8,0xc6,0xc0,0x1b]2999; X64-AVX1-NEXT:    # xmm0 = xmm0[3,2,1,0]3000; X64-AVX1-NEXT:    vmovaps %xmm0, (%rdi) # encoding: [0xc5,0xf8,0x29,0x07]3001; X64-AVX1-NEXT:    retq # encoding: [0xc3]3002;3003; X64-AVX512-LABEL: test_mm_storer_ps:3004; X64-AVX512:       # %bb.0:3005; X64-AVX512-NEXT:    vshufps $27, %xmm0, %xmm0, %xmm0 # EVEX TO VEX Compression encoding: [0xc5,0xf8,0xc6,0xc0,0x1b]3006; X64-AVX512-NEXT:    # xmm0 = xmm0[3,2,1,0]3007; X64-AVX512-NEXT:    vmovaps %xmm0, (%rdi) # EVEX TO VEX Compression encoding: [0xc5,0xf8,0x29,0x07]3008; X64-AVX512-NEXT:    retq # encoding: [0xc3]3009  %arg0 = bitcast ptr %a0 to ptr3010  %shuf = shufflevector <4 x float> %a1, <4 x float> undef, <4 x i32> <i32 3, i32 2, i32 1, i32 0>3011  store <4 x float> %shuf, ptr %arg0, align 163012  ret void3013}3014 3015define void @test_mm_storeu_ps(ptr %a0, <4 x float> %a1) {3016; X86-SSE-LABEL: test_mm_storeu_ps:3017; X86-SSE:       # %bb.0:3018; X86-SSE-NEXT:    movl {{[0-9]+}}(%esp), %eax # encoding: [0x8b,0x44,0x24,0x04]3019; X86-SSE-NEXT:    movups %xmm0, (%eax) # encoding: [0x0f,0x11,0x00]3020; X86-SSE-NEXT:    retl # encoding: [0xc3]3021;3022; X86-AVX1-LABEL: test_mm_storeu_ps:3023; X86-AVX1:       # %bb.0:3024; X86-AVX1-NEXT:    movl {{[0-9]+}}(%esp), %eax # encoding: [0x8b,0x44,0x24,0x04]3025; X86-AVX1-NEXT:    vmovups %xmm0, (%eax) # encoding: [0xc5,0xf8,0x11,0x00]3026; X86-AVX1-NEXT:    retl # encoding: [0xc3]3027;3028; X86-AVX512-LABEL: test_mm_storeu_ps:3029; X86-AVX512:       # %bb.0:3030; X86-AVX512-NEXT:    movl {{[0-9]+}}(%esp), %eax # encoding: [0x8b,0x44,0x24,0x04]3031; X86-AVX512-NEXT:    vmovups %xmm0, (%eax) # EVEX TO VEX Compression encoding: [0xc5,0xf8,0x11,0x00]3032; X86-AVX512-NEXT:    retl # encoding: [0xc3]3033;3034; X64-SSE-LABEL: test_mm_storeu_ps:3035; X64-SSE:       # %bb.0:3036; X64-SSE-NEXT:    movups %xmm0, (%rdi) # encoding: [0x0f,0x11,0x07]3037; X64-SSE-NEXT:    retq # encoding: [0xc3]3038;3039; X64-AVX1-LABEL: test_mm_storeu_ps:3040; X64-AVX1:       # %bb.0:3041; X64-AVX1-NEXT:    vmovups %xmm0, (%rdi) # encoding: [0xc5,0xf8,0x11,0x07]3042; X64-AVX1-NEXT:    retq # encoding: [0xc3]3043;3044; X64-AVX512-LABEL: test_mm_storeu_ps:3045; X64-AVX512:       # %bb.0:3046; X64-AVX512-NEXT:    vmovups %xmm0, (%rdi) # EVEX TO VEX Compression encoding: [0xc5,0xf8,0x11,0x07]3047; X64-AVX512-NEXT:    retq # encoding: [0xc3]3048  %arg0 = bitcast ptr %a0 to ptr3049  store <4 x float> %a1, ptr %arg0, align 13050  ret void3051}3052 3053define void @test_mm_stream_ps(ptr %a0, <4 x float> %a1) {3054; X86-SSE-LABEL: test_mm_stream_ps:3055; X86-SSE:       # %bb.0:3056; X86-SSE-NEXT:    movl {{[0-9]+}}(%esp), %eax # encoding: [0x8b,0x44,0x24,0x04]3057; X86-SSE-NEXT:    movntps %xmm0, (%eax) # encoding: [0x0f,0x2b,0x00]3058; X86-SSE-NEXT:    retl # encoding: [0xc3]3059;3060; X86-AVX1-LABEL: test_mm_stream_ps:3061; X86-AVX1:       # %bb.0:3062; X86-AVX1-NEXT:    movl {{[0-9]+}}(%esp), %eax # encoding: [0x8b,0x44,0x24,0x04]3063; X86-AVX1-NEXT:    vmovntps %xmm0, (%eax) # encoding: [0xc5,0xf8,0x2b,0x00]3064; X86-AVX1-NEXT:    retl # encoding: [0xc3]3065;3066; X86-AVX512-LABEL: test_mm_stream_ps:3067; X86-AVX512:       # %bb.0:3068; X86-AVX512-NEXT:    movl {{[0-9]+}}(%esp), %eax # encoding: [0x8b,0x44,0x24,0x04]3069; X86-AVX512-NEXT:    vmovntps %xmm0, (%eax) # EVEX TO VEX Compression encoding: [0xc5,0xf8,0x2b,0x00]3070; X86-AVX512-NEXT:    retl # encoding: [0xc3]3071;3072; X64-SSE-LABEL: test_mm_stream_ps:3073; X64-SSE:       # %bb.0:3074; X64-SSE-NEXT:    movntps %xmm0, (%rdi) # encoding: [0x0f,0x2b,0x07]3075; X64-SSE-NEXT:    retq # encoding: [0xc3]3076;3077; X64-AVX1-LABEL: test_mm_stream_ps:3078; X64-AVX1:       # %bb.0:3079; X64-AVX1-NEXT:    vmovntps %xmm0, (%rdi) # encoding: [0xc5,0xf8,0x2b,0x07]3080; X64-AVX1-NEXT:    retq # encoding: [0xc3]3081;3082; X64-AVX512-LABEL: test_mm_stream_ps:3083; X64-AVX512:       # %bb.0:3084; X64-AVX512-NEXT:    vmovntps %xmm0, (%rdi) # EVEX TO VEX Compression encoding: [0xc5,0xf8,0x2b,0x07]3085; X64-AVX512-NEXT:    retq # encoding: [0xc3]3086  %arg0 = bitcast ptr %a0 to ptr3087  store <4 x float> %a1, ptr %arg0, align 16, !nontemporal !03088  ret void3089}3090 3091define <4 x float> @test_mm_sub_ps(<4 x float> %a0, <4 x float> %a1) nounwind {3092; SSE-LABEL: test_mm_sub_ps:3093; SSE:       # %bb.0:3094; SSE-NEXT:    subps %xmm1, %xmm0 # encoding: [0x0f,0x5c,0xc1]3095; SSE-NEXT:    ret{{[l|q]}} # encoding: [0xc3]3096;3097; AVX1-LABEL: test_mm_sub_ps:3098; AVX1:       # %bb.0:3099; AVX1-NEXT:    vsubps %xmm1, %xmm0, %xmm0 # encoding: [0xc5,0xf8,0x5c,0xc1]3100; AVX1-NEXT:    ret{{[l|q]}} # encoding: [0xc3]3101;3102; AVX512-LABEL: test_mm_sub_ps:3103; AVX512:       # %bb.0:3104; AVX512-NEXT:    vsubps %xmm1, %xmm0, %xmm0 # EVEX TO VEX Compression encoding: [0xc5,0xf8,0x5c,0xc1]3105; AVX512-NEXT:    ret{{[l|q]}} # encoding: [0xc3]3106  %res = fsub <4 x float> %a0, %a13107  ret <4 x float> %res3108}3109 3110define <4 x float> @test_mm_sub_ss(<4 x float> %a0, <4 x float> %a1) nounwind {3111; SSE-LABEL: test_mm_sub_ss:3112; SSE:       # %bb.0:3113; SSE-NEXT:    subss %xmm1, %xmm0 # encoding: [0xf3,0x0f,0x5c,0xc1]3114; SSE-NEXT:    ret{{[l|q]}} # encoding: [0xc3]3115;3116; AVX1-LABEL: test_mm_sub_ss:3117; AVX1:       # %bb.0:3118; AVX1-NEXT:    vsubss %xmm1, %xmm0, %xmm0 # encoding: [0xc5,0xfa,0x5c,0xc1]3119; AVX1-NEXT:    ret{{[l|q]}} # encoding: [0xc3]3120;3121; AVX512-LABEL: test_mm_sub_ss:3122; AVX512:       # %bb.0:3123; AVX512-NEXT:    vsubss %xmm1, %xmm0, %xmm0 # EVEX TO VEX Compression encoding: [0xc5,0xfa,0x5c,0xc1]3124; AVX512-NEXT:    ret{{[l|q]}} # encoding: [0xc3]3125  %ext0 = extractelement <4 x float> %a0, i32 03126  %ext1 = extractelement <4 x float> %a1, i32 03127  %fsub = fsub float %ext0, %ext13128  %res = insertelement <4 x float> %a0, float %fsub, i32 03129  ret <4 x float> %res3130}3131 3132define void @test_MM_TRANSPOSE4_PS(ptr %a0, ptr %a1, ptr %a2, ptr %a3) nounwind {3133; X86-SSE-LABEL: test_MM_TRANSPOSE4_PS:3134; X86-SSE:       # %bb.0:3135; X86-SSE-NEXT:    pushl %esi # encoding: [0x56]3136; X86-SSE-NEXT:    movl {{[0-9]+}}(%esp), %eax # encoding: [0x8b,0x44,0x24,0x14]3137; X86-SSE-NEXT:    movl {{[0-9]+}}(%esp), %ecx # encoding: [0x8b,0x4c,0x24,0x10]3138; X86-SSE-NEXT:    movl {{[0-9]+}}(%esp), %edx # encoding: [0x8b,0x54,0x24,0x0c]3139; X86-SSE-NEXT:    movl {{[0-9]+}}(%esp), %esi # encoding: [0x8b,0x74,0x24,0x08]3140; X86-SSE-NEXT:    movaps (%esi), %xmm1 # encoding: [0x0f,0x28,0x0e]3141; X86-SSE-NEXT:    movaps (%edx), %xmm2 # encoding: [0x0f,0x28,0x12]3142; X86-SSE-NEXT:    movaps (%ecx), %xmm0 # encoding: [0x0f,0x28,0x01]3143; X86-SSE-NEXT:    movaps (%eax), %xmm3 # encoding: [0x0f,0x28,0x18]3144; X86-SSE-NEXT:    movaps %xmm1, %xmm4 # encoding: [0x0f,0x28,0xe1]3145; X86-SSE-NEXT:    unpcklps %xmm2, %xmm4 # encoding: [0x0f,0x14,0xe2]3146; X86-SSE-NEXT:    # xmm4 = xmm4[0],xmm2[0],xmm4[1],xmm2[1]3147; X86-SSE-NEXT:    movaps %xmm0, %xmm5 # encoding: [0x0f,0x28,0xe8]3148; X86-SSE-NEXT:    unpcklps %xmm3, %xmm5 # encoding: [0x0f,0x14,0xeb]3149; X86-SSE-NEXT:    # xmm5 = xmm5[0],xmm3[0],xmm5[1],xmm3[1]3150; X86-SSE-NEXT:    unpckhps %xmm2, %xmm1 # encoding: [0x0f,0x15,0xca]3151; X86-SSE-NEXT:    # xmm1 = xmm1[2],xmm2[2],xmm1[3],xmm2[3]3152; X86-SSE-NEXT:    unpckhps %xmm3, %xmm0 # encoding: [0x0f,0x15,0xc3]3153; X86-SSE-NEXT:    # xmm0 = xmm0[2],xmm3[2],xmm0[3],xmm3[3]3154; X86-SSE-NEXT:    movaps %xmm4, %xmm2 # encoding: [0x0f,0x28,0xd4]3155; X86-SSE-NEXT:    movlhps %xmm5, %xmm2 # encoding: [0x0f,0x16,0xd5]3156; X86-SSE-NEXT:    # xmm2 = xmm2[0],xmm5[0]3157; X86-SSE-NEXT:    movhlps %xmm4, %xmm5 # encoding: [0x0f,0x12,0xec]3158; X86-SSE-NEXT:    # xmm5 = xmm4[1],xmm5[1]3159; X86-SSE-NEXT:    movaps %xmm1, %xmm3 # encoding: [0x0f,0x28,0xd9]3160; X86-SSE-NEXT:    movlhps %xmm0, %xmm3 # encoding: [0x0f,0x16,0xd8]3161; X86-SSE-NEXT:    # xmm3 = xmm3[0],xmm0[0]3162; X86-SSE-NEXT:    movhlps %xmm1, %xmm0 # encoding: [0x0f,0x12,0xc1]3163; X86-SSE-NEXT:    # xmm0 = xmm1[1],xmm0[1]3164; X86-SSE-NEXT:    movaps %xmm2, (%esi) # encoding: [0x0f,0x29,0x16]3165; X86-SSE-NEXT:    movaps %xmm5, (%edx) # encoding: [0x0f,0x29,0x2a]3166; X86-SSE-NEXT:    movaps %xmm3, (%ecx) # encoding: [0x0f,0x29,0x19]3167; X86-SSE-NEXT:    movaps %xmm0, (%eax) # encoding: [0x0f,0x29,0x00]3168; X86-SSE-NEXT:    popl %esi # encoding: [0x5e]3169; X86-SSE-NEXT:    retl # encoding: [0xc3]3170;3171; X86-AVX1-LABEL: test_MM_TRANSPOSE4_PS:3172; X86-AVX1:       # %bb.0:3173; X86-AVX1-NEXT:    pushl %esi # encoding: [0x56]3174; X86-AVX1-NEXT:    movl {{[0-9]+}}(%esp), %eax # encoding: [0x8b,0x44,0x24,0x14]3175; X86-AVX1-NEXT:    movl {{[0-9]+}}(%esp), %ecx # encoding: [0x8b,0x4c,0x24,0x10]3176; X86-AVX1-NEXT:    movl {{[0-9]+}}(%esp), %edx # encoding: [0x8b,0x54,0x24,0x0c]3177; X86-AVX1-NEXT:    movl {{[0-9]+}}(%esp), %esi # encoding: [0x8b,0x74,0x24,0x08]3178; X86-AVX1-NEXT:    vmovaps (%esi), %xmm0 # encoding: [0xc5,0xf8,0x28,0x06]3179; X86-AVX1-NEXT:    vmovaps (%edx), %xmm1 # encoding: [0xc5,0xf8,0x28,0x0a]3180; X86-AVX1-NEXT:    vmovaps (%ecx), %xmm2 # encoding: [0xc5,0xf8,0x28,0x11]3181; X86-AVX1-NEXT:    vmovaps (%eax), %xmm3 # encoding: [0xc5,0xf8,0x28,0x18]3182; X86-AVX1-NEXT:    vunpcklps %xmm1, %xmm0, %xmm4 # encoding: [0xc5,0xf8,0x14,0xe1]3183; X86-AVX1-NEXT:    # xmm4 = xmm0[0],xmm1[0],xmm0[1],xmm1[1]3184; X86-AVX1-NEXT:    vunpcklps %xmm3, %xmm2, %xmm5 # encoding: [0xc5,0xe8,0x14,0xeb]3185; X86-AVX1-NEXT:    # xmm5 = xmm2[0],xmm3[0],xmm2[1],xmm3[1]3186; X86-AVX1-NEXT:    vunpckhps %xmm1, %xmm0, %xmm0 # encoding: [0xc5,0xf8,0x15,0xc1]3187; X86-AVX1-NEXT:    # xmm0 = xmm0[2],xmm1[2],xmm0[3],xmm1[3]3188; X86-AVX1-NEXT:    vunpckhps %xmm3, %xmm2, %xmm1 # encoding: [0xc5,0xe8,0x15,0xcb]3189; X86-AVX1-NEXT:    # xmm1 = xmm2[2],xmm3[2],xmm2[3],xmm3[3]3190; X86-AVX1-NEXT:    vmovlhps %xmm5, %xmm4, %xmm2 # encoding: [0xc5,0xd8,0x16,0xd5]3191; X86-AVX1-NEXT:    # xmm2 = xmm4[0],xmm5[0]3192; X86-AVX1-NEXT:    vunpckhpd %xmm5, %xmm4, %xmm3 # encoding: [0xc5,0xd9,0x15,0xdd]3193; X86-AVX1-NEXT:    # xmm3 = xmm4[1],xmm5[1]3194; X86-AVX1-NEXT:    vmovlhps %xmm1, %xmm0, %xmm4 # encoding: [0xc5,0xf8,0x16,0xe1]3195; X86-AVX1-NEXT:    # xmm4 = xmm0[0],xmm1[0]3196; X86-AVX1-NEXT:    vunpckhpd %xmm1, %xmm0, %xmm0 # encoding: [0xc5,0xf9,0x15,0xc1]3197; X86-AVX1-NEXT:    # xmm0 = xmm0[1],xmm1[1]3198; X86-AVX1-NEXT:    vmovaps %xmm2, (%esi) # encoding: [0xc5,0xf8,0x29,0x16]3199; X86-AVX1-NEXT:    vmovaps %xmm3, (%edx) # encoding: [0xc5,0xf8,0x29,0x1a]3200; X86-AVX1-NEXT:    vmovaps %xmm4, (%ecx) # encoding: [0xc5,0xf8,0x29,0x21]3201; X86-AVX1-NEXT:    vmovaps %xmm0, (%eax) # encoding: [0xc5,0xf8,0x29,0x00]3202; X86-AVX1-NEXT:    popl %esi # encoding: [0x5e]3203; X86-AVX1-NEXT:    retl # encoding: [0xc3]3204;3205; X86-AVX512-LABEL: test_MM_TRANSPOSE4_PS:3206; X86-AVX512:       # %bb.0:3207; X86-AVX512-NEXT:    pushl %esi # encoding: [0x56]3208; X86-AVX512-NEXT:    movl {{[0-9]+}}(%esp), %eax # encoding: [0x8b,0x44,0x24,0x14]3209; X86-AVX512-NEXT:    movl {{[0-9]+}}(%esp), %ecx # encoding: [0x8b,0x4c,0x24,0x10]3210; X86-AVX512-NEXT:    movl {{[0-9]+}}(%esp), %edx # encoding: [0x8b,0x54,0x24,0x0c]3211; X86-AVX512-NEXT:    movl {{[0-9]+}}(%esp), %esi # encoding: [0x8b,0x74,0x24,0x08]3212; X86-AVX512-NEXT:    vmovaps (%esi), %xmm0 # EVEX TO VEX Compression encoding: [0xc5,0xf8,0x28,0x06]3213; X86-AVX512-NEXT:    vmovaps (%edx), %xmm1 # EVEX TO VEX Compression encoding: [0xc5,0xf8,0x28,0x0a]3214; X86-AVX512-NEXT:    vmovaps (%ecx), %xmm2 # EVEX TO VEX Compression encoding: [0xc5,0xf8,0x28,0x11]3215; X86-AVX512-NEXT:    vmovaps (%eax), %xmm3 # EVEX TO VEX Compression encoding: [0xc5,0xf8,0x28,0x18]3216; X86-AVX512-NEXT:    vunpcklps %xmm1, %xmm0, %xmm4 # EVEX TO VEX Compression encoding: [0xc5,0xf8,0x14,0xe1]3217; X86-AVX512-NEXT:    # xmm4 = xmm0[0],xmm1[0],xmm0[1],xmm1[1]3218; X86-AVX512-NEXT:    vunpcklps %xmm3, %xmm2, %xmm5 # EVEX TO VEX Compression encoding: [0xc5,0xe8,0x14,0xeb]3219; X86-AVX512-NEXT:    # xmm5 = xmm2[0],xmm3[0],xmm2[1],xmm3[1]3220; X86-AVX512-NEXT:    vunpckhps %xmm1, %xmm0, %xmm0 # EVEX TO VEX Compression encoding: [0xc5,0xf8,0x15,0xc1]3221; X86-AVX512-NEXT:    # xmm0 = xmm0[2],xmm1[2],xmm0[3],xmm1[3]3222; X86-AVX512-NEXT:    vunpckhps %xmm3, %xmm2, %xmm1 # EVEX TO VEX Compression encoding: [0xc5,0xe8,0x15,0xcb]3223; X86-AVX512-NEXT:    # xmm1 = xmm2[2],xmm3[2],xmm2[3],xmm3[3]3224; X86-AVX512-NEXT:    vmovlhps %xmm5, %xmm4, %xmm2 # EVEX TO VEX Compression encoding: [0xc5,0xd8,0x16,0xd5]3225; X86-AVX512-NEXT:    # xmm2 = xmm4[0],xmm5[0]3226; X86-AVX512-NEXT:    vunpckhpd %xmm5, %xmm4, %xmm3 # EVEX TO VEX Compression encoding: [0xc5,0xd9,0x15,0xdd]3227; X86-AVX512-NEXT:    # xmm3 = xmm4[1],xmm5[1]3228; X86-AVX512-NEXT:    vmovlhps %xmm1, %xmm0, %xmm4 # EVEX TO VEX Compression encoding: [0xc5,0xf8,0x16,0xe1]3229; X86-AVX512-NEXT:    # xmm4 = xmm0[0],xmm1[0]3230; X86-AVX512-NEXT:    vunpckhpd %xmm1, %xmm0, %xmm0 # EVEX TO VEX Compression encoding: [0xc5,0xf9,0x15,0xc1]3231; X86-AVX512-NEXT:    # xmm0 = xmm0[1],xmm1[1]3232; X86-AVX512-NEXT:    vmovaps %xmm2, (%esi) # EVEX TO VEX Compression encoding: [0xc5,0xf8,0x29,0x16]3233; X86-AVX512-NEXT:    vmovaps %xmm3, (%edx) # EVEX TO VEX Compression encoding: [0xc5,0xf8,0x29,0x1a]3234; X86-AVX512-NEXT:    vmovaps %xmm4, (%ecx) # EVEX TO VEX Compression encoding: [0xc5,0xf8,0x29,0x21]3235; X86-AVX512-NEXT:    vmovaps %xmm0, (%eax) # EVEX TO VEX Compression encoding: [0xc5,0xf8,0x29,0x00]3236; X86-AVX512-NEXT:    popl %esi # encoding: [0x5e]3237; X86-AVX512-NEXT:    retl # encoding: [0xc3]3238;3239; X64-SSE-LABEL: test_MM_TRANSPOSE4_PS:3240; X64-SSE:       # %bb.0:3241; X64-SSE-NEXT:    movaps (%rdi), %xmm0 # encoding: [0x0f,0x28,0x07]3242; X64-SSE-NEXT:    movaps (%rsi), %xmm1 # encoding: [0x0f,0x28,0x0e]3243; X64-SSE-NEXT:    movaps (%rdx), %xmm2 # encoding: [0x0f,0x28,0x12]3244; X64-SSE-NEXT:    movaps (%rcx), %xmm3 # encoding: [0x0f,0x28,0x19]3245; X64-SSE-NEXT:    movaps %xmm0, %xmm4 # encoding: [0x0f,0x28,0xe0]3246; X64-SSE-NEXT:    unpcklps %xmm1, %xmm4 # encoding: [0x0f,0x14,0xe1]3247; X64-SSE-NEXT:    # xmm4 = xmm4[0],xmm1[0],xmm4[1],xmm1[1]3248; X64-SSE-NEXT:    movaps %xmm2, %xmm5 # encoding: [0x0f,0x28,0xea]3249; X64-SSE-NEXT:    unpcklps %xmm3, %xmm5 # encoding: [0x0f,0x14,0xeb]3250; X64-SSE-NEXT:    # xmm5 = xmm5[0],xmm3[0],xmm5[1],xmm3[1]3251; X64-SSE-NEXT:    unpckhps %xmm1, %xmm0 # encoding: [0x0f,0x15,0xc1]3252; X64-SSE-NEXT:    # xmm0 = xmm0[2],xmm1[2],xmm0[3],xmm1[3]3253; X64-SSE-NEXT:    unpckhps %xmm3, %xmm2 # encoding: [0x0f,0x15,0xd3]3254; X64-SSE-NEXT:    # xmm2 = xmm2[2],xmm3[2],xmm2[3],xmm3[3]3255; X64-SSE-NEXT:    movaps %xmm4, %xmm1 # encoding: [0x0f,0x28,0xcc]3256; X64-SSE-NEXT:    movlhps %xmm5, %xmm1 # encoding: [0x0f,0x16,0xcd]3257; X64-SSE-NEXT:    # xmm1 = xmm1[0],xmm5[0]3258; X64-SSE-NEXT:    movhlps %xmm4, %xmm5 # encoding: [0x0f,0x12,0xec]3259; X64-SSE-NEXT:    # xmm5 = xmm4[1],xmm5[1]3260; X64-SSE-NEXT:    movaps %xmm0, %xmm3 # encoding: [0x0f,0x28,0xd8]3261; X64-SSE-NEXT:    movlhps %xmm2, %xmm3 # encoding: [0x0f,0x16,0xda]3262; X64-SSE-NEXT:    # xmm3 = xmm3[0],xmm2[0]3263; X64-SSE-NEXT:    movhlps %xmm0, %xmm2 # encoding: [0x0f,0x12,0xd0]3264; X64-SSE-NEXT:    # xmm2 = xmm0[1],xmm2[1]3265; X64-SSE-NEXT:    movaps %xmm1, (%rdi) # encoding: [0x0f,0x29,0x0f]3266; X64-SSE-NEXT:    movaps %xmm5, (%rsi) # encoding: [0x0f,0x29,0x2e]3267; X64-SSE-NEXT:    movaps %xmm3, (%rdx) # encoding: [0x0f,0x29,0x1a]3268; X64-SSE-NEXT:    movaps %xmm2, (%rcx) # encoding: [0x0f,0x29,0x11]3269; X64-SSE-NEXT:    retq # encoding: [0xc3]3270;3271; X64-AVX1-LABEL: test_MM_TRANSPOSE4_PS:3272; X64-AVX1:       # %bb.0:3273; X64-AVX1-NEXT:    vmovaps (%rdi), %xmm0 # encoding: [0xc5,0xf8,0x28,0x07]3274; X64-AVX1-NEXT:    vmovaps (%rsi), %xmm1 # encoding: [0xc5,0xf8,0x28,0x0e]3275; X64-AVX1-NEXT:    vmovaps (%rdx), %xmm2 # encoding: [0xc5,0xf8,0x28,0x12]3276; X64-AVX1-NEXT:    vmovaps (%rcx), %xmm3 # encoding: [0xc5,0xf8,0x28,0x19]3277; X64-AVX1-NEXT:    vunpcklps %xmm1, %xmm0, %xmm4 # encoding: [0xc5,0xf8,0x14,0xe1]3278; X64-AVX1-NEXT:    # xmm4 = xmm0[0],xmm1[0],xmm0[1],xmm1[1]3279; X64-AVX1-NEXT:    vunpcklps %xmm3, %xmm2, %xmm5 # encoding: [0xc5,0xe8,0x14,0xeb]3280; X64-AVX1-NEXT:    # xmm5 = xmm2[0],xmm3[0],xmm2[1],xmm3[1]3281; X64-AVX1-NEXT:    vunpckhps %xmm1, %xmm0, %xmm0 # encoding: [0xc5,0xf8,0x15,0xc1]3282; X64-AVX1-NEXT:    # xmm0 = xmm0[2],xmm1[2],xmm0[3],xmm1[3]3283; X64-AVX1-NEXT:    vunpckhps %xmm3, %xmm2, %xmm1 # encoding: [0xc5,0xe8,0x15,0xcb]3284; X64-AVX1-NEXT:    # xmm1 = xmm2[2],xmm3[2],xmm2[3],xmm3[3]3285; X64-AVX1-NEXT:    vmovlhps %xmm5, %xmm4, %xmm2 # encoding: [0xc5,0xd8,0x16,0xd5]3286; X64-AVX1-NEXT:    # xmm2 = xmm4[0],xmm5[0]3287; X64-AVX1-NEXT:    vunpckhpd %xmm5, %xmm4, %xmm3 # encoding: [0xc5,0xd9,0x15,0xdd]3288; X64-AVX1-NEXT:    # xmm3 = xmm4[1],xmm5[1]3289; X64-AVX1-NEXT:    vmovlhps %xmm1, %xmm0, %xmm4 # encoding: [0xc5,0xf8,0x16,0xe1]3290; X64-AVX1-NEXT:    # xmm4 = xmm0[0],xmm1[0]3291; X64-AVX1-NEXT:    vunpckhpd %xmm1, %xmm0, %xmm0 # encoding: [0xc5,0xf9,0x15,0xc1]3292; X64-AVX1-NEXT:    # xmm0 = xmm0[1],xmm1[1]3293; X64-AVX1-NEXT:    vmovaps %xmm2, (%rdi) # encoding: [0xc5,0xf8,0x29,0x17]3294; X64-AVX1-NEXT:    vmovaps %xmm3, (%rsi) # encoding: [0xc5,0xf8,0x29,0x1e]3295; X64-AVX1-NEXT:    vmovaps %xmm4, (%rdx) # encoding: [0xc5,0xf8,0x29,0x22]3296; X64-AVX1-NEXT:    vmovaps %xmm0, (%rcx) # encoding: [0xc5,0xf8,0x29,0x01]3297; X64-AVX1-NEXT:    retq # encoding: [0xc3]3298;3299; X64-AVX512-LABEL: test_MM_TRANSPOSE4_PS:3300; X64-AVX512:       # %bb.0:3301; X64-AVX512-NEXT:    vmovaps (%rdi), %xmm0 # EVEX TO VEX Compression encoding: [0xc5,0xf8,0x28,0x07]3302; X64-AVX512-NEXT:    vmovaps (%rsi), %xmm1 # EVEX TO VEX Compression encoding: [0xc5,0xf8,0x28,0x0e]3303; X64-AVX512-NEXT:    vmovaps (%rdx), %xmm2 # EVEX TO VEX Compression encoding: [0xc5,0xf8,0x28,0x12]3304; X64-AVX512-NEXT:    vmovaps (%rcx), %xmm3 # EVEX TO VEX Compression encoding: [0xc5,0xf8,0x28,0x19]3305; X64-AVX512-NEXT:    vunpcklps %xmm1, %xmm0, %xmm4 # EVEX TO VEX Compression encoding: [0xc5,0xf8,0x14,0xe1]3306; X64-AVX512-NEXT:    # xmm4 = xmm0[0],xmm1[0],xmm0[1],xmm1[1]3307; X64-AVX512-NEXT:    vunpcklps %xmm3, %xmm2, %xmm5 # EVEX TO VEX Compression encoding: [0xc5,0xe8,0x14,0xeb]3308; X64-AVX512-NEXT:    # xmm5 = xmm2[0],xmm3[0],xmm2[1],xmm3[1]3309; X64-AVX512-NEXT:    vunpckhps %xmm1, %xmm0, %xmm0 # EVEX TO VEX Compression encoding: [0xc5,0xf8,0x15,0xc1]3310; X64-AVX512-NEXT:    # xmm0 = xmm0[2],xmm1[2],xmm0[3],xmm1[3]3311; X64-AVX512-NEXT:    vunpckhps %xmm3, %xmm2, %xmm1 # EVEX TO VEX Compression encoding: [0xc5,0xe8,0x15,0xcb]3312; X64-AVX512-NEXT:    # xmm1 = xmm2[2],xmm3[2],xmm2[3],xmm3[3]3313; X64-AVX512-NEXT:    vmovlhps %xmm5, %xmm4, %xmm2 # EVEX TO VEX Compression encoding: [0xc5,0xd8,0x16,0xd5]3314; X64-AVX512-NEXT:    # xmm2 = xmm4[0],xmm5[0]3315; X64-AVX512-NEXT:    vunpckhpd %xmm5, %xmm4, %xmm3 # EVEX TO VEX Compression encoding: [0xc5,0xd9,0x15,0xdd]3316; X64-AVX512-NEXT:    # xmm3 = xmm4[1],xmm5[1]3317; X64-AVX512-NEXT:    vmovlhps %xmm1, %xmm0, %xmm4 # EVEX TO VEX Compression encoding: [0xc5,0xf8,0x16,0xe1]3318; X64-AVX512-NEXT:    # xmm4 = xmm0[0],xmm1[0]3319; X64-AVX512-NEXT:    vunpckhpd %xmm1, %xmm0, %xmm0 # EVEX TO VEX Compression encoding: [0xc5,0xf9,0x15,0xc1]3320; X64-AVX512-NEXT:    # xmm0 = xmm0[1],xmm1[1]3321; X64-AVX512-NEXT:    vmovaps %xmm2, (%rdi) # EVEX TO VEX Compression encoding: [0xc5,0xf8,0x29,0x17]3322; X64-AVX512-NEXT:    vmovaps %xmm3, (%rsi) # EVEX TO VEX Compression encoding: [0xc5,0xf8,0x29,0x1e]3323; X64-AVX512-NEXT:    vmovaps %xmm4, (%rdx) # EVEX TO VEX Compression encoding: [0xc5,0xf8,0x29,0x22]3324; X64-AVX512-NEXT:    vmovaps %xmm0, (%rcx) # EVEX TO VEX Compression encoding: [0xc5,0xf8,0x29,0x01]3325; X64-AVX512-NEXT:    retq # encoding: [0xc3]3326  %row0 = load <4 x float>, ptr %a0, align 163327  %row1 = load <4 x float>, ptr %a1, align 163328  %row2 = load <4 x float>, ptr %a2, align 163329  %row3 = load <4 x float>, ptr %a3, align 163330  %tmp0 = shufflevector <4 x float> %row0, <4 x float> %row1, <4 x i32> <i32 0, i32 4, i32 1, i32 5>3331  %tmp2 = shufflevector <4 x float> %row2, <4 x float> %row3, <4 x i32> <i32 0, i32 4, i32 1, i32 5>3332  %tmp1 = shufflevector <4 x float> %row0, <4 x float> %row1, <4 x i32> <i32 2, i32 6, i32 3, i32 7>3333  %tmp3 = shufflevector <4 x float> %row2, <4 x float> %row3, <4 x i32> <i32 2, i32 6, i32 3, i32 7>3334  %res0 = shufflevector <4 x float> %tmp0, <4 x float> %tmp2, <4 x i32> <i32 0, i32 1, i32 4, i32 5>3335  %res1 = shufflevector <4 x float> %tmp2, <4 x float> %tmp0, <4 x i32> <i32 6, i32 7, i32 2, i32 3>3336  %res2 = shufflevector <4 x float> %tmp1, <4 x float> %tmp3, <4 x i32> <i32 0, i32 1, i32 4, i32 5>3337  %res3 = shufflevector <4 x float> %tmp3, <4 x float> %tmp1, <4 x i32> <i32 6, i32 7, i32 2, i32 3>3338  store <4 x float> %res0, ptr %a0, align 163339  store <4 x float> %res1, ptr %a1, align 163340  store <4 x float> %res2, ptr %a2, align 163341  store <4 x float> %res3, ptr %a3, align 163342  ret void3343}3344 3345define i32 @test_mm_ucomieq_ss(<4 x float> %a0, <4 x float> %a1) nounwind {3346; SSE-LABEL: test_mm_ucomieq_ss:3347; SSE:       # %bb.0:3348; SSE-NEXT:    ucomiss %xmm1, %xmm0 # encoding: [0x0f,0x2e,0xc1]3349; SSE-NEXT:    setnp %al # encoding: [0x0f,0x9b,0xc0]3350; SSE-NEXT:    sete %cl # encoding: [0x0f,0x94,0xc1]3351; SSE-NEXT:    andb %al, %cl # encoding: [0x20,0xc1]3352; SSE-NEXT:    movzbl %cl, %eax # encoding: [0x0f,0xb6,0xc1]3353; SSE-NEXT:    ret{{[l|q]}} # encoding: [0xc3]3354;3355; AVX1-LABEL: test_mm_ucomieq_ss:3356; AVX1:       # %bb.0:3357; AVX1-NEXT:    vucomiss %xmm1, %xmm0 # encoding: [0xc5,0xf8,0x2e,0xc1]3358; AVX1-NEXT:    setnp %al # encoding: [0x0f,0x9b,0xc0]3359; AVX1-NEXT:    sete %cl # encoding: [0x0f,0x94,0xc1]3360; AVX1-NEXT:    andb %al, %cl # encoding: [0x20,0xc1]3361; AVX1-NEXT:    movzbl %cl, %eax # encoding: [0x0f,0xb6,0xc1]3362; AVX1-NEXT:    ret{{[l|q]}} # encoding: [0xc3]3363;3364; AVX512-LABEL: test_mm_ucomieq_ss:3365; AVX512:       # %bb.0:3366; AVX512-NEXT:    vucomiss %xmm1, %xmm0 # EVEX TO VEX Compression encoding: [0xc5,0xf8,0x2e,0xc1]3367; AVX512-NEXT:    setnp %al # encoding: [0x0f,0x9b,0xc0]3368; AVX512-NEXT:    sete %cl # encoding: [0x0f,0x94,0xc1]3369; AVX512-NEXT:    andb %al, %cl # encoding: [0x20,0xc1]3370; AVX512-NEXT:    movzbl %cl, %eax # encoding: [0x0f,0xb6,0xc1]3371; AVX512-NEXT:    ret{{[l|q]}} # encoding: [0xc3]3372  %res = call i32 @llvm.x86.sse.ucomieq.ss(<4 x float> %a0, <4 x float> %a1)3373  ret i32 %res3374}3375declare i32 @llvm.x86.sse.ucomieq.ss(<4 x float>, <4 x float>) nounwind readnone3376 3377define i32 @test_mm_ucomige_ss(<4 x float> %a0, <4 x float> %a1) nounwind {3378; SSE-LABEL: test_mm_ucomige_ss:3379; SSE:       # %bb.0:3380; SSE-NEXT:    xorl %eax, %eax # encoding: [0x31,0xc0]3381; SSE-NEXT:    ucomiss %xmm1, %xmm0 # encoding: [0x0f,0x2e,0xc1]3382; SSE-NEXT:    setae %al # encoding: [0x0f,0x93,0xc0]3383; SSE-NEXT:    ret{{[l|q]}} # encoding: [0xc3]3384;3385; AVX1-LABEL: test_mm_ucomige_ss:3386; AVX1:       # %bb.0:3387; AVX1-NEXT:    xorl %eax, %eax # encoding: [0x31,0xc0]3388; AVX1-NEXT:    vucomiss %xmm1, %xmm0 # encoding: [0xc5,0xf8,0x2e,0xc1]3389; AVX1-NEXT:    setae %al # encoding: [0x0f,0x93,0xc0]3390; AVX1-NEXT:    ret{{[l|q]}} # encoding: [0xc3]3391;3392; AVX512-LABEL: test_mm_ucomige_ss:3393; AVX512:       # %bb.0:3394; AVX512-NEXT:    xorl %eax, %eax # encoding: [0x31,0xc0]3395; AVX512-NEXT:    vucomiss %xmm1, %xmm0 # EVEX TO VEX Compression encoding: [0xc5,0xf8,0x2e,0xc1]3396; AVX512-NEXT:    setae %al # encoding: [0x0f,0x93,0xc0]3397; AVX512-NEXT:    ret{{[l|q]}} # encoding: [0xc3]3398  %res = call i32 @llvm.x86.sse.ucomige.ss(<4 x float> %a0, <4 x float> %a1)3399  ret i32 %res3400}3401declare i32 @llvm.x86.sse.ucomige.ss(<4 x float>, <4 x float>) nounwind readnone3402 3403define i32 @test_mm_ucomigt_ss(<4 x float> %a0, <4 x float> %a1) nounwind {3404; SSE-LABEL: test_mm_ucomigt_ss:3405; SSE:       # %bb.0:3406; SSE-NEXT:    xorl %eax, %eax # encoding: [0x31,0xc0]3407; SSE-NEXT:    ucomiss %xmm1, %xmm0 # encoding: [0x0f,0x2e,0xc1]3408; SSE-NEXT:    seta %al # encoding: [0x0f,0x97,0xc0]3409; SSE-NEXT:    ret{{[l|q]}} # encoding: [0xc3]3410;3411; AVX1-LABEL: test_mm_ucomigt_ss:3412; AVX1:       # %bb.0:3413; AVX1-NEXT:    xorl %eax, %eax # encoding: [0x31,0xc0]3414; AVX1-NEXT:    vucomiss %xmm1, %xmm0 # encoding: [0xc5,0xf8,0x2e,0xc1]3415; AVX1-NEXT:    seta %al # encoding: [0x0f,0x97,0xc0]3416; AVX1-NEXT:    ret{{[l|q]}} # encoding: [0xc3]3417;3418; AVX512-LABEL: test_mm_ucomigt_ss:3419; AVX512:       # %bb.0:3420; AVX512-NEXT:    xorl %eax, %eax # encoding: [0x31,0xc0]3421; AVX512-NEXT:    vucomiss %xmm1, %xmm0 # EVEX TO VEX Compression encoding: [0xc5,0xf8,0x2e,0xc1]3422; AVX512-NEXT:    seta %al # encoding: [0x0f,0x97,0xc0]3423; AVX512-NEXT:    ret{{[l|q]}} # encoding: [0xc3]3424  %res = call i32 @llvm.x86.sse.ucomigt.ss(<4 x float> %a0, <4 x float> %a1)3425  ret i32 %res3426}3427declare i32 @llvm.x86.sse.ucomigt.ss(<4 x float>, <4 x float>) nounwind readnone3428 3429define i32 @test_mm_ucomile_ss(<4 x float> %a0, <4 x float> %a1) nounwind {3430; SSE-LABEL: test_mm_ucomile_ss:3431; SSE:       # %bb.0:3432; SSE-NEXT:    xorl %eax, %eax # encoding: [0x31,0xc0]3433; SSE-NEXT:    ucomiss %xmm0, %xmm1 # encoding: [0x0f,0x2e,0xc8]3434; SSE-NEXT:    setae %al # encoding: [0x0f,0x93,0xc0]3435; SSE-NEXT:    ret{{[l|q]}} # encoding: [0xc3]3436;3437; AVX1-LABEL: test_mm_ucomile_ss:3438; AVX1:       # %bb.0:3439; AVX1-NEXT:    xorl %eax, %eax # encoding: [0x31,0xc0]3440; AVX1-NEXT:    vucomiss %xmm0, %xmm1 # encoding: [0xc5,0xf8,0x2e,0xc8]3441; AVX1-NEXT:    setae %al # encoding: [0x0f,0x93,0xc0]3442; AVX1-NEXT:    ret{{[l|q]}} # encoding: [0xc3]3443;3444; AVX512-LABEL: test_mm_ucomile_ss:3445; AVX512:       # %bb.0:3446; AVX512-NEXT:    xorl %eax, %eax # encoding: [0x31,0xc0]3447; AVX512-NEXT:    vucomiss %xmm0, %xmm1 # EVEX TO VEX Compression encoding: [0xc5,0xf8,0x2e,0xc8]3448; AVX512-NEXT:    setae %al # encoding: [0x0f,0x93,0xc0]3449; AVX512-NEXT:    ret{{[l|q]}} # encoding: [0xc3]3450  %res = call i32 @llvm.x86.sse.ucomile.ss(<4 x float> %a0, <4 x float> %a1)3451  ret i32 %res3452}3453declare i32 @llvm.x86.sse.ucomile.ss(<4 x float>, <4 x float>) nounwind readnone3454 3455define i32 @test_mm_ucomilt_ss(<4 x float> %a0, <4 x float> %a1) nounwind {3456; SSE-LABEL: test_mm_ucomilt_ss:3457; SSE:       # %bb.0:3458; SSE-NEXT:    xorl %eax, %eax # encoding: [0x31,0xc0]3459; SSE-NEXT:    ucomiss %xmm0, %xmm1 # encoding: [0x0f,0x2e,0xc8]3460; SSE-NEXT:    seta %al # encoding: [0x0f,0x97,0xc0]3461; SSE-NEXT:    ret{{[l|q]}} # encoding: [0xc3]3462;3463; AVX1-LABEL: test_mm_ucomilt_ss:3464; AVX1:       # %bb.0:3465; AVX1-NEXT:    xorl %eax, %eax # encoding: [0x31,0xc0]3466; AVX1-NEXT:    vucomiss %xmm0, %xmm1 # encoding: [0xc5,0xf8,0x2e,0xc8]3467; AVX1-NEXT:    seta %al # encoding: [0x0f,0x97,0xc0]3468; AVX1-NEXT:    ret{{[l|q]}} # encoding: [0xc3]3469;3470; AVX512-LABEL: test_mm_ucomilt_ss:3471; AVX512:       # %bb.0:3472; AVX512-NEXT:    xorl %eax, %eax # encoding: [0x31,0xc0]3473; AVX512-NEXT:    vucomiss %xmm0, %xmm1 # EVEX TO VEX Compression encoding: [0xc5,0xf8,0x2e,0xc8]3474; AVX512-NEXT:    seta %al # encoding: [0x0f,0x97,0xc0]3475; AVX512-NEXT:    ret{{[l|q]}} # encoding: [0xc3]3476  %res = call i32 @llvm.x86.sse.ucomilt.ss(<4 x float> %a0, <4 x float> %a1)3477  ret i32 %res3478}3479declare i32 @llvm.x86.sse.ucomilt.ss(<4 x float>, <4 x float>) nounwind readnone3480 3481define i32 @test_mm_ucomineq_ss(<4 x float> %a0, <4 x float> %a1) nounwind {3482; SSE-LABEL: test_mm_ucomineq_ss:3483; SSE:       # %bb.0:3484; SSE-NEXT:    ucomiss %xmm1, %xmm0 # encoding: [0x0f,0x2e,0xc1]3485; SSE-NEXT:    setp %al # encoding: [0x0f,0x9a,0xc0]3486; SSE-NEXT:    setne %cl # encoding: [0x0f,0x95,0xc1]3487; SSE-NEXT:    orb %al, %cl # encoding: [0x08,0xc1]3488; SSE-NEXT:    movzbl %cl, %eax # encoding: [0x0f,0xb6,0xc1]3489; SSE-NEXT:    ret{{[l|q]}} # encoding: [0xc3]3490;3491; AVX1-LABEL: test_mm_ucomineq_ss:3492; AVX1:       # %bb.0:3493; AVX1-NEXT:    vucomiss %xmm1, %xmm0 # encoding: [0xc5,0xf8,0x2e,0xc1]3494; AVX1-NEXT:    setp %al # encoding: [0x0f,0x9a,0xc0]3495; AVX1-NEXT:    setne %cl # encoding: [0x0f,0x95,0xc1]3496; AVX1-NEXT:    orb %al, %cl # encoding: [0x08,0xc1]3497; AVX1-NEXT:    movzbl %cl, %eax # encoding: [0x0f,0xb6,0xc1]3498; AVX1-NEXT:    ret{{[l|q]}} # encoding: [0xc3]3499;3500; AVX512-LABEL: test_mm_ucomineq_ss:3501; AVX512:       # %bb.0:3502; AVX512-NEXT:    vucomiss %xmm1, %xmm0 # EVEX TO VEX Compression encoding: [0xc5,0xf8,0x2e,0xc1]3503; AVX512-NEXT:    setp %al # encoding: [0x0f,0x9a,0xc0]3504; AVX512-NEXT:    setne %cl # encoding: [0x0f,0x95,0xc1]3505; AVX512-NEXT:    orb %al, %cl # encoding: [0x08,0xc1]3506; AVX512-NEXT:    movzbl %cl, %eax # encoding: [0x0f,0xb6,0xc1]3507; AVX512-NEXT:    ret{{[l|q]}} # encoding: [0xc3]3508  %res = call i32 @llvm.x86.sse.ucomineq.ss(<4 x float> %a0, <4 x float> %a1)3509  ret i32 %res3510}3511declare i32 @llvm.x86.sse.ucomineq.ss(<4 x float>, <4 x float>) nounwind readnone3512 3513define <4 x float> @test_mm_undefined_ps() {3514; CHECK-LABEL: test_mm_undefined_ps:3515; CHECK:       # %bb.0:3516; CHECK-NEXT:    ret{{[l|q]}} # encoding: [0xc3]3517  ret <4 x float> undef3518}3519 3520define <4 x float> @test_mm_unpackhi_ps(<4 x float> %a0, <4 x float> %a1) nounwind {3521; SSE-LABEL: test_mm_unpackhi_ps:3522; SSE:       # %bb.0:3523; SSE-NEXT:    unpckhps %xmm1, %xmm0 # encoding: [0x0f,0x15,0xc1]3524; SSE-NEXT:    # xmm0 = xmm0[2],xmm1[2],xmm0[3],xmm1[3]3525; SSE-NEXT:    ret{{[l|q]}} # encoding: [0xc3]3526;3527; AVX1-LABEL: test_mm_unpackhi_ps:3528; AVX1:       # %bb.0:3529; AVX1-NEXT:    vunpckhps %xmm1, %xmm0, %xmm0 # encoding: [0xc5,0xf8,0x15,0xc1]3530; AVX1-NEXT:    # xmm0 = xmm0[2],xmm1[2],xmm0[3],xmm1[3]3531; AVX1-NEXT:    ret{{[l|q]}} # encoding: [0xc3]3532;3533; AVX512-LABEL: test_mm_unpackhi_ps:3534; AVX512:       # %bb.0:3535; AVX512-NEXT:    vunpckhps %xmm1, %xmm0, %xmm0 # EVEX TO VEX Compression encoding: [0xc5,0xf8,0x15,0xc1]3536; AVX512-NEXT:    # xmm0 = xmm0[2],xmm1[2],xmm0[3],xmm1[3]3537; AVX512-NEXT:    ret{{[l|q]}} # encoding: [0xc3]3538  %res = shufflevector <4 x float> %a0, <4 x float> %a1, <4 x i32> <i32 2, i32 6, i32 3, i32 7>3539  ret <4 x float> %res3540}3541 3542define <4 x float> @test_mm_unpacklo_ps(<4 x float> %a0, <4 x float> %a1) nounwind {3543; SSE-LABEL: test_mm_unpacklo_ps:3544; SSE:       # %bb.0:3545; SSE-NEXT:    unpcklps %xmm1, %xmm0 # encoding: [0x0f,0x14,0xc1]3546; SSE-NEXT:    # xmm0 = xmm0[0],xmm1[0],xmm0[1],xmm1[1]3547; SSE-NEXT:    ret{{[l|q]}} # encoding: [0xc3]3548;3549; AVX1-LABEL: test_mm_unpacklo_ps:3550; AVX1:       # %bb.0:3551; AVX1-NEXT:    vunpcklps %xmm1, %xmm0, %xmm0 # encoding: [0xc5,0xf8,0x14,0xc1]3552; AVX1-NEXT:    # xmm0 = xmm0[0],xmm1[0],xmm0[1],xmm1[1]3553; AVX1-NEXT:    ret{{[l|q]}} # encoding: [0xc3]3554;3555; AVX512-LABEL: test_mm_unpacklo_ps:3556; AVX512:       # %bb.0:3557; AVX512-NEXT:    vunpcklps %xmm1, %xmm0, %xmm0 # EVEX TO VEX Compression encoding: [0xc5,0xf8,0x14,0xc1]3558; AVX512-NEXT:    # xmm0 = xmm0[0],xmm1[0],xmm0[1],xmm1[1]3559; AVX512-NEXT:    ret{{[l|q]}} # encoding: [0xc3]3560  %res = shufflevector <4 x float> %a0, <4 x float> %a1, <4 x i32> <i32 0, i32 4, i32 1, i32 5>3561  ret <4 x float> %res3562}3563 3564define <4 x float> @test_mm_xor_ps(<4 x float> %a0, <4 x float> %a1) nounwind {3565; SSE-LABEL: test_mm_xor_ps:3566; SSE:       # %bb.0:3567; SSE-NEXT:    xorps %xmm1, %xmm0 # encoding: [0x0f,0x57,0xc1]3568; SSE-NEXT:    ret{{[l|q]}} # encoding: [0xc3]3569;3570; AVX1-LABEL: test_mm_xor_ps:3571; AVX1:       # %bb.0:3572; AVX1-NEXT:    vxorps %xmm1, %xmm0, %xmm0 # encoding: [0xc5,0xf8,0x57,0xc1]3573; AVX1-NEXT:    ret{{[l|q]}} # encoding: [0xc3]3574;3575; AVX512-LABEL: test_mm_xor_ps:3576; AVX512:       # %bb.0:3577; AVX512-NEXT:    vxorps %xmm1, %xmm0, %xmm0 # EVEX TO VEX Compression encoding: [0xc5,0xf8,0x57,0xc1]3578; AVX512-NEXT:    ret{{[l|q]}} # encoding: [0xc3]3579  %arg0 = bitcast <4 x float> %a0 to <4 x i32>3580  %arg1 = bitcast <4 x float> %a1 to <4 x i32>3581  %res = xor <4 x i32> %arg0, %arg13582  %bc = bitcast <4 x i32> %res to <4 x float>3583  ret <4 x float> %bc3584}3585 3586!0 = !{i32 1}3587