brintos

brintos / llvm-project-archived public Read only

0
0
Text · 18.7 KiB · 255ea44 Raw
631 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py2; RUN: llc < %s -mtriple=i686-unknown -mattr=+sse2     | FileCheck %s --check-prefixes=X86,SSE-X86,SSE2-X863; RUN: llc < %s -mtriple=x86_64-unknown -mattr=+sse2   | FileCheck %s --check-prefixes=X64,SSE-X64,SSE2-X644; RUN: llc < %s -mtriple=i686-unknown -mattr=+sse4.1   | FileCheck %s --check-prefixes=X86,SSE-X86,SSE41-X865; RUN: llc < %s -mtriple=x86_64-unknown -mattr=+sse4.1 | FileCheck %s --check-prefixes=X64,SSE-X64,SSE41-X646; RUN: llc < %s -mtriple=i686-unknown -mattr=+avx      | FileCheck %s --check-prefixes=X86,AVX-X867; RUN: llc < %s -mtriple=x86_64-unknown -mattr=+avx    | FileCheck %s --check-prefixes=X64,AVX-X648; RUN: llc < %s -O2 -mtriple=x86_64-linux-android -mattr=+sse -enable-legalize-types-checking | FileCheck %s --check-prefixes=X64,SSE-X64,SSE2-X649; RUN: llc < %s -O2 -mtriple=x86_64-linux-gnu -mattr=+sse -enable-legalize-types-checking | FileCheck %s --check-prefixes=X64,SSE-X64,SSE2-X6410 11define void @extract_i8_0(ptr nocapture %dst, <16 x i8> %foo) nounwind {12; SSE2-X86-LABEL: extract_i8_0:13; SSE2-X86:       # %bb.0:14; SSE2-X86-NEXT:    movl {{[0-9]+}}(%esp), %eax15; SSE2-X86-NEXT:    movd %xmm0, %ecx16; SSE2-X86-NEXT:    movb %cl, (%eax)17; SSE2-X86-NEXT:    retl18;19; SSE2-X64-LABEL: extract_i8_0:20; SSE2-X64:       # %bb.0:21; SSE2-X64-NEXT:    movd %xmm0, %eax22; SSE2-X64-NEXT:    movb %al, (%rdi)23; SSE2-X64-NEXT:    retq24;25; SSE41-X86-LABEL: extract_i8_0:26; SSE41-X86:       # %bb.0:27; SSE41-X86-NEXT:    movl {{[0-9]+}}(%esp), %eax28; SSE41-X86-NEXT:    pextrb $0, %xmm0, (%eax)29; SSE41-X86-NEXT:    retl30;31; SSE41-X64-LABEL: extract_i8_0:32; SSE41-X64:       # %bb.0:33; SSE41-X64-NEXT:    pextrb $0, %xmm0, (%rdi)34; SSE41-X64-NEXT:    retq35;36; AVX-X86-LABEL: extract_i8_0:37; AVX-X86:       # %bb.0:38; AVX-X86-NEXT:    movl {{[0-9]+}}(%esp), %eax39; AVX-X86-NEXT:    vpextrb $0, %xmm0, (%eax)40; AVX-X86-NEXT:    retl41;42; AVX-X64-LABEL: extract_i8_0:43; AVX-X64:       # %bb.0:44; AVX-X64-NEXT:    vpextrb $0, %xmm0, (%rdi)45; AVX-X64-NEXT:    retq46  %vecext = extractelement <16 x i8> %foo, i32 047  store i8 %vecext, ptr %dst, align 148  ret void49}50 51define void @extract_i8_3(ptr nocapture %dst, <16 x i8> %foo) nounwind {52; SSE2-X86-LABEL: extract_i8_3:53; SSE2-X86:       # %bb.0:54; SSE2-X86-NEXT:    movl {{[0-9]+}}(%esp), %eax55; SSE2-X86-NEXT:    movd %xmm0, %ecx56; SSE2-X86-NEXT:    shrl $24, %ecx57; SSE2-X86-NEXT:    movb %cl, (%eax)58; SSE2-X86-NEXT:    retl59;60; SSE2-X64-LABEL: extract_i8_3:61; SSE2-X64:       # %bb.0:62; SSE2-X64-NEXT:    movd %xmm0, %eax63; SSE2-X64-NEXT:    shrl $24, %eax64; SSE2-X64-NEXT:    movb %al, (%rdi)65; SSE2-X64-NEXT:    retq66;67; SSE41-X86-LABEL: extract_i8_3:68; SSE41-X86:       # %bb.0:69; SSE41-X86-NEXT:    movl {{[0-9]+}}(%esp), %eax70; SSE41-X86-NEXT:    pextrb $3, %xmm0, (%eax)71; SSE41-X86-NEXT:    retl72;73; SSE41-X64-LABEL: extract_i8_3:74; SSE41-X64:       # %bb.0:75; SSE41-X64-NEXT:    pextrb $3, %xmm0, (%rdi)76; SSE41-X64-NEXT:    retq77;78; AVX-X86-LABEL: extract_i8_3:79; AVX-X86:       # %bb.0:80; AVX-X86-NEXT:    movl {{[0-9]+}}(%esp), %eax81; AVX-X86-NEXT:    vpextrb $3, %xmm0, (%eax)82; AVX-X86-NEXT:    retl83;84; AVX-X64-LABEL: extract_i8_3:85; AVX-X64:       # %bb.0:86; AVX-X64-NEXT:    vpextrb $3, %xmm0, (%rdi)87; AVX-X64-NEXT:    retq88  %vecext = extractelement <16 x i8> %foo, i32 389  store i8 %vecext, ptr %dst, align 190  ret void91}92 93define void @extract_i8_15(ptr nocapture %dst, <16 x i8> %foo) nounwind {94; SSE2-X86-LABEL: extract_i8_15:95; SSE2-X86:       # %bb.0:96; SSE2-X86-NEXT:    movl {{[0-9]+}}(%esp), %eax97; SSE2-X86-NEXT:    pextrw $7, %xmm0, %ecx98; SSE2-X86-NEXT:    movb %ch, (%eax)99; SSE2-X86-NEXT:    retl100;101; SSE2-X64-LABEL: extract_i8_15:102; SSE2-X64:       # %bb.0:103; SSE2-X64-NEXT:    pextrw $7, %xmm0, %eax104; SSE2-X64-NEXT:    movb %ah, (%rdi)105; SSE2-X64-NEXT:    retq106;107; SSE41-X86-LABEL: extract_i8_15:108; SSE41-X86:       # %bb.0:109; SSE41-X86-NEXT:    movl {{[0-9]+}}(%esp), %eax110; SSE41-X86-NEXT:    pextrb $15, %xmm0, (%eax)111; SSE41-X86-NEXT:    retl112;113; SSE41-X64-LABEL: extract_i8_15:114; SSE41-X64:       # %bb.0:115; SSE41-X64-NEXT:    pextrb $15, %xmm0, (%rdi)116; SSE41-X64-NEXT:    retq117;118; AVX-X86-LABEL: extract_i8_15:119; AVX-X86:       # %bb.0:120; AVX-X86-NEXT:    movl {{[0-9]+}}(%esp), %eax121; AVX-X86-NEXT:    vpextrb $15, %xmm0, (%eax)122; AVX-X86-NEXT:    retl123;124; AVX-X64-LABEL: extract_i8_15:125; AVX-X64:       # %bb.0:126; AVX-X64-NEXT:    vpextrb $15, %xmm0, (%rdi)127; AVX-X64-NEXT:    retq128  %vecext = extractelement <16 x i8> %foo, i32 15129  store i8 %vecext, ptr %dst, align 1130  ret void131}132 133define void @extract_i16_0(ptr nocapture %dst, <8 x i16> %foo) nounwind {134; SSE2-X86-LABEL: extract_i16_0:135; SSE2-X86:       # %bb.0:136; SSE2-X86-NEXT:    movl {{[0-9]+}}(%esp), %eax137; SSE2-X86-NEXT:    movd %xmm0, %ecx138; SSE2-X86-NEXT:    movw %cx, (%eax)139; SSE2-X86-NEXT:    retl140;141; SSE2-X64-LABEL: extract_i16_0:142; SSE2-X64:       # %bb.0:143; SSE2-X64-NEXT:    movd %xmm0, %eax144; SSE2-X64-NEXT:    movw %ax, (%rdi)145; SSE2-X64-NEXT:    retq146;147; SSE41-X86-LABEL: extract_i16_0:148; SSE41-X86:       # %bb.0:149; SSE41-X86-NEXT:    movl {{[0-9]+}}(%esp), %eax150; SSE41-X86-NEXT:    pextrw $0, %xmm0, (%eax)151; SSE41-X86-NEXT:    retl152;153; SSE41-X64-LABEL: extract_i16_0:154; SSE41-X64:       # %bb.0:155; SSE41-X64-NEXT:    pextrw $0, %xmm0, (%rdi)156; SSE41-X64-NEXT:    retq157;158; AVX-X86-LABEL: extract_i16_0:159; AVX-X86:       # %bb.0:160; AVX-X86-NEXT:    movl {{[0-9]+}}(%esp), %eax161; AVX-X86-NEXT:    vpextrw $0, %xmm0, (%eax)162; AVX-X86-NEXT:    retl163;164; AVX-X64-LABEL: extract_i16_0:165; AVX-X64:       # %bb.0:166; AVX-X64-NEXT:    vpextrw $0, %xmm0, (%rdi)167; AVX-X64-NEXT:    retq168  %vecext = extractelement <8 x i16> %foo, i32 0169  store i16 %vecext, ptr %dst, align 1170  ret void171}172 173define void @extract_i16_7(ptr nocapture %dst, <8 x i16> %foo) nounwind {174; SSE2-X86-LABEL: extract_i16_7:175; SSE2-X86:       # %bb.0:176; SSE2-X86-NEXT:    movl {{[0-9]+}}(%esp), %eax177; SSE2-X86-NEXT:    pextrw $7, %xmm0, %ecx178; SSE2-X86-NEXT:    movw %cx, (%eax)179; SSE2-X86-NEXT:    retl180;181; SSE2-X64-LABEL: extract_i16_7:182; SSE2-X64:       # %bb.0:183; SSE2-X64-NEXT:    pextrw $7, %xmm0, %eax184; SSE2-X64-NEXT:    movw %ax, (%rdi)185; SSE2-X64-NEXT:    retq186;187; SSE41-X86-LABEL: extract_i16_7:188; SSE41-X86:       # %bb.0:189; SSE41-X86-NEXT:    movl {{[0-9]+}}(%esp), %eax190; SSE41-X86-NEXT:    pextrw $7, %xmm0, (%eax)191; SSE41-X86-NEXT:    retl192;193; SSE41-X64-LABEL: extract_i16_7:194; SSE41-X64:       # %bb.0:195; SSE41-X64-NEXT:    pextrw $7, %xmm0, (%rdi)196; SSE41-X64-NEXT:    retq197;198; AVX-X86-LABEL: extract_i16_7:199; AVX-X86:       # %bb.0:200; AVX-X86-NEXT:    movl {{[0-9]+}}(%esp), %eax201; AVX-X86-NEXT:    vpextrw $7, %xmm0, (%eax)202; AVX-X86-NEXT:    retl203;204; AVX-X64-LABEL: extract_i16_7:205; AVX-X64:       # %bb.0:206; AVX-X64-NEXT:    vpextrw $7, %xmm0, (%rdi)207; AVX-X64-NEXT:    retq208  %vecext = extractelement <8 x i16> %foo, i32 7209  store i16 %vecext, ptr %dst, align 1210  ret void211}212 213define void @extract_i32_0(ptr nocapture %dst, <4 x i32> %foo) nounwind {214; SSE-X86-LABEL: extract_i32_0:215; SSE-X86:       # %bb.0:216; SSE-X86-NEXT:    movl {{[0-9]+}}(%esp), %eax217; SSE-X86-NEXT:    movss %xmm0, (%eax)218; SSE-X86-NEXT:    retl219;220; SSE-X64-LABEL: extract_i32_0:221; SSE-X64:       # %bb.0:222; SSE-X64-NEXT:    movss %xmm0, (%rdi)223; SSE-X64-NEXT:    retq224;225; AVX-X86-LABEL: extract_i32_0:226; AVX-X86:       # %bb.0:227; AVX-X86-NEXT:    movl {{[0-9]+}}(%esp), %eax228; AVX-X86-NEXT:    vmovss %xmm0, (%eax)229; AVX-X86-NEXT:    retl230;231; AVX-X64-LABEL: extract_i32_0:232; AVX-X64:       # %bb.0:233; AVX-X64-NEXT:    vmovss %xmm0, (%rdi)234; AVX-X64-NEXT:    retq235  %vecext = extractelement <4 x i32> %foo, i32 0236  store i32 %vecext, ptr %dst, align 1237  ret void238}239 240define void @extract_i32_3(ptr nocapture %dst, <4 x i32> %foo) nounwind {241; SSE2-X86-LABEL: extract_i32_3:242; SSE2-X86:       # %bb.0:243; SSE2-X86-NEXT:    movl {{[0-9]+}}(%esp), %eax244; SSE2-X86-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[3,3,3,3]245; SSE2-X86-NEXT:    movd %xmm0, (%eax)246; SSE2-X86-NEXT:    retl247;248; SSE2-X64-LABEL: extract_i32_3:249; SSE2-X64:       # %bb.0:250; SSE2-X64-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[3,3,3,3]251; SSE2-X64-NEXT:    movd %xmm0, (%rdi)252; SSE2-X64-NEXT:    retq253;254; SSE41-X86-LABEL: extract_i32_3:255; SSE41-X86:       # %bb.0:256; SSE41-X86-NEXT:    movl {{[0-9]+}}(%esp), %eax257; SSE41-X86-NEXT:    extractps $3, %xmm0, (%eax)258; SSE41-X86-NEXT:    retl259;260; SSE41-X64-LABEL: extract_i32_3:261; SSE41-X64:       # %bb.0:262; SSE41-X64-NEXT:    extractps $3, %xmm0, (%rdi)263; SSE41-X64-NEXT:    retq264;265; AVX-X86-LABEL: extract_i32_3:266; AVX-X86:       # %bb.0:267; AVX-X86-NEXT:    movl {{[0-9]+}}(%esp), %eax268; AVX-X86-NEXT:    vextractps $3, %xmm0, (%eax)269; AVX-X86-NEXT:    retl270;271; AVX-X64-LABEL: extract_i32_3:272; AVX-X64:       # %bb.0:273; AVX-X64-NEXT:    vextractps $3, %xmm0, (%rdi)274; AVX-X64-NEXT:    retq275  %vecext = extractelement <4 x i32> %foo, i32 3276  store i32 %vecext, ptr %dst, align 1277  ret void278}279 280define void @extract_i64_0(ptr nocapture %dst, <2 x i64> %foo) nounwind {281; SSE-X86-LABEL: extract_i64_0:282; SSE-X86:       # %bb.0:283; SSE-X86-NEXT:    movl {{[0-9]+}}(%esp), %eax284; SSE-X86-NEXT:    movlps %xmm0, (%eax)285; SSE-X86-NEXT:    retl286;287; SSE-X64-LABEL: extract_i64_0:288; SSE-X64:       # %bb.0:289; SSE-X64-NEXT:    movlps %xmm0, (%rdi)290; SSE-X64-NEXT:    retq291;292; AVX-X86-LABEL: extract_i64_0:293; AVX-X86:       # %bb.0:294; AVX-X86-NEXT:    movl {{[0-9]+}}(%esp), %eax295; AVX-X86-NEXT:    vmovlps %xmm0, (%eax)296; AVX-X86-NEXT:    retl297;298; AVX-X64-LABEL: extract_i64_0:299; AVX-X64:       # %bb.0:300; AVX-X64-NEXT:    vmovlps %xmm0, (%rdi)301; AVX-X64-NEXT:    retq302  %vecext = extractelement <2 x i64> %foo, i32 0303  store i64 %vecext, ptr %dst, align 1304  ret void305}306 307define void @extract_i64_1(ptr nocapture %dst, <2 x i64> %foo) nounwind {308; SSE-X86-LABEL: extract_i64_1:309; SSE-X86:       # %bb.0:310; SSE-X86-NEXT:    movl {{[0-9]+}}(%esp), %eax311; SSE-X86-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[2,3,2,3]312; SSE-X86-NEXT:    movq %xmm0, (%eax)313; SSE-X86-NEXT:    retl314;315; SSE2-X64-LABEL: extract_i64_1:316; SSE2-X64:       # %bb.0:317; SSE2-X64-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[2,3,2,3]318; SSE2-X64-NEXT:    movq %xmm0, (%rdi)319; SSE2-X64-NEXT:    retq320;321; SSE41-X64-LABEL: extract_i64_1:322; SSE41-X64:       # %bb.0:323; SSE41-X64-NEXT:    pextrq $1, %xmm0, (%rdi)324; SSE41-X64-NEXT:    retq325;326; AVX-X86-LABEL: extract_i64_1:327; AVX-X86:       # %bb.0:328; AVX-X86-NEXT:    movl {{[0-9]+}}(%esp), %eax329; AVX-X86-NEXT:    vshufps {{.*#+}} xmm0 = xmm0[2,3,0,1]330; AVX-X86-NEXT:    vmovlps %xmm0, (%eax)331; AVX-X86-NEXT:    retl332;333; AVX-X64-LABEL: extract_i64_1:334; AVX-X64:       # %bb.0:335; AVX-X64-NEXT:    vpextrq $1, %xmm0, (%rdi)336; AVX-X64-NEXT:    retq337  %vecext = extractelement <2 x i64> %foo, i32 1338  store i64 %vecext, ptr %dst, align 1339  ret void340}341 342define void @extract_f32_0(ptr nocapture %dst, <4 x float> %foo) nounwind {343; SSE-X86-LABEL: extract_f32_0:344; SSE-X86:       # %bb.0:345; SSE-X86-NEXT:    movl {{[0-9]+}}(%esp), %eax346; SSE-X86-NEXT:    movss %xmm0, (%eax)347; SSE-X86-NEXT:    retl348;349; SSE-X64-LABEL: extract_f32_0:350; SSE-X64:       # %bb.0:351; SSE-X64-NEXT:    movss %xmm0, (%rdi)352; SSE-X64-NEXT:    retq353;354; AVX-X86-LABEL: extract_f32_0:355; AVX-X86:       # %bb.0:356; AVX-X86-NEXT:    movl {{[0-9]+}}(%esp), %eax357; AVX-X86-NEXT:    vmovss %xmm0, (%eax)358; AVX-X86-NEXT:    retl359;360; AVX-X64-LABEL: extract_f32_0:361; AVX-X64:       # %bb.0:362; AVX-X64-NEXT:    vmovss %xmm0, (%rdi)363; AVX-X64-NEXT:    retq364  %vecext = extractelement <4 x float> %foo, i32 0365  store float %vecext, ptr %dst, align 1366  ret void367}368 369define void @extract_f32_3(ptr nocapture %dst, <4 x float> %foo) nounwind {370; SSE2-X86-LABEL: extract_f32_3:371; SSE2-X86:       # %bb.0:372; SSE2-X86-NEXT:    movl {{[0-9]+}}(%esp), %eax373; SSE2-X86-NEXT:    shufps {{.*#+}} xmm0 = xmm0[3,3,3,3]374; SSE2-X86-NEXT:    movss %xmm0, (%eax)375; SSE2-X86-NEXT:    retl376;377; SSE2-X64-LABEL: extract_f32_3:378; SSE2-X64:       # %bb.0:379; SSE2-X64-NEXT:    shufps {{.*#+}} xmm0 = xmm0[3,3,3,3]380; SSE2-X64-NEXT:    movss %xmm0, (%rdi)381; SSE2-X64-NEXT:    retq382;383; SSE41-X86-LABEL: extract_f32_3:384; SSE41-X86:       # %bb.0:385; SSE41-X86-NEXT:    movl {{[0-9]+}}(%esp), %eax386; SSE41-X86-NEXT:    extractps $3, %xmm0, (%eax)387; SSE41-X86-NEXT:    retl388;389; SSE41-X64-LABEL: extract_f32_3:390; SSE41-X64:       # %bb.0:391; SSE41-X64-NEXT:    extractps $3, %xmm0, (%rdi)392; SSE41-X64-NEXT:    retq393;394; AVX-X86-LABEL: extract_f32_3:395; AVX-X86:       # %bb.0:396; AVX-X86-NEXT:    movl {{[0-9]+}}(%esp), %eax397; AVX-X86-NEXT:    vextractps $3, %xmm0, (%eax)398; AVX-X86-NEXT:    retl399;400; AVX-X64-LABEL: extract_f32_3:401; AVX-X64:       # %bb.0:402; AVX-X64-NEXT:    vextractps $3, %xmm0, (%rdi)403; AVX-X64-NEXT:    retq404  %vecext = extractelement <4 x float> %foo, i32 3405  store float %vecext, ptr %dst, align 1406  ret void407}408 409define void @extract_f64_0(ptr nocapture %dst, <2 x double> %foo) nounwind {410; SSE-X86-LABEL: extract_f64_0:411; SSE-X86:       # %bb.0:412; SSE-X86-NEXT:    movl {{[0-9]+}}(%esp), %eax413; SSE-X86-NEXT:    movlps %xmm0, (%eax)414; SSE-X86-NEXT:    retl415;416; SSE-X64-LABEL: extract_f64_0:417; SSE-X64:       # %bb.0:418; SSE-X64-NEXT:    movlps %xmm0, (%rdi)419; SSE-X64-NEXT:    retq420;421; AVX-X86-LABEL: extract_f64_0:422; AVX-X86:       # %bb.0:423; AVX-X86-NEXT:    movl {{[0-9]+}}(%esp), %eax424; AVX-X86-NEXT:    vmovlps %xmm0, (%eax)425; AVX-X86-NEXT:    retl426;427; AVX-X64-LABEL: extract_f64_0:428; AVX-X64:       # %bb.0:429; AVX-X64-NEXT:    vmovlps %xmm0, (%rdi)430; AVX-X64-NEXT:    retq431  %vecext = extractelement <2 x double> %foo, i32 0432  store double %vecext, ptr %dst, align 1433  ret void434}435 436define void @extract_f64_1(ptr nocapture %dst, <2 x double> %foo) nounwind {437; SSE-X86-LABEL: extract_f64_1:438; SSE-X86:       # %bb.0:439; SSE-X86-NEXT:    movl {{[0-9]+}}(%esp), %eax440; SSE-X86-NEXT:    movhps %xmm0, (%eax)441; SSE-X86-NEXT:    retl442;443; SSE-X64-LABEL: extract_f64_1:444; SSE-X64:       # %bb.0:445; SSE-X64-NEXT:    movhps %xmm0, (%rdi)446; SSE-X64-NEXT:    retq447;448; AVX-X86-LABEL: extract_f64_1:449; AVX-X86:       # %bb.0:450; AVX-X86-NEXT:    movl {{[0-9]+}}(%esp), %eax451; AVX-X86-NEXT:    vmovhps %xmm0, (%eax)452; AVX-X86-NEXT:    retl453;454; AVX-X64-LABEL: extract_f64_1:455; AVX-X64:       # %bb.0:456; AVX-X64-NEXT:    vmovhps %xmm0, (%rdi)457; AVX-X64-NEXT:    retq458  %vecext = extractelement <2 x double> %foo, i32 1459  store double %vecext, ptr %dst, align 1460  ret void461}462 463define void @extract_f128_0(ptr nocapture %dst, <2 x fp128> %foo) nounwind {464; SSE-X86-LABEL: extract_f128_0:465; SSE-X86:       # %bb.0:466; SSE-X86-NEXT:    pushl %edi467; SSE-X86-NEXT:    pushl %esi468; SSE-X86-NEXT:    movl {{[0-9]+}}(%esp), %eax469; SSE-X86-NEXT:    movl {{[0-9]+}}(%esp), %ecx470; SSE-X86-NEXT:    movl {{[0-9]+}}(%esp), %edx471; SSE-X86-NEXT:    movl {{[0-9]+}}(%esp), %esi472; SSE-X86-NEXT:    movl {{[0-9]+}}(%esp), %edi473; SSE-X86-NEXT:    movl %esi, 12(%edi)474; SSE-X86-NEXT:    movl %edx, 8(%edi)475; SSE-X86-NEXT:    movl %ecx, 4(%edi)476; SSE-X86-NEXT:    movl %eax, (%edi)477; SSE-X86-NEXT:    popl %esi478; SSE-X86-NEXT:    popl %edi479; SSE-X86-NEXT:    retl480;481; SSE-X64-LABEL: extract_f128_0:482; SSE-X64:       # %bb.0:483; SSE-X64-NEXT:    movups %xmm0, (%rdi)484; SSE-X64-NEXT:    retq485;486; AVX-X86-LABEL: extract_f128_0:487; AVX-X86:       # %bb.0:488; AVX-X86-NEXT:    vmovups {{[0-9]+}}(%esp), %xmm0489; AVX-X86-NEXT:    movl {{[0-9]+}}(%esp), %eax490; AVX-X86-NEXT:    vmovups %xmm0, (%eax)491; AVX-X86-NEXT:    retl492;493; AVX-X64-LABEL: extract_f128_0:494; AVX-X64:       # %bb.0:495; AVX-X64-NEXT:    vmovups %xmm0, (%rdi)496; AVX-X64-NEXT:    retq497  %vecext = extractelement <2 x fp128> %foo, i32 0498  store fp128 %vecext, ptr %dst, align 1499  ret void500}501 502define void @extract_f128_1(ptr nocapture %dst, <2 x fp128> %foo) nounwind {503; SSE-X86-LABEL: extract_f128_1:504; SSE-X86:       # %bb.0:505; SSE-X86-NEXT:    pushl %edi506; SSE-X86-NEXT:    pushl %esi507; SSE-X86-NEXT:    movl {{[0-9]+}}(%esp), %eax508; SSE-X86-NEXT:    movl {{[0-9]+}}(%esp), %ecx509; SSE-X86-NEXT:    movl {{[0-9]+}}(%esp), %edx510; SSE-X86-NEXT:    movl {{[0-9]+}}(%esp), %esi511; SSE-X86-NEXT:    movl {{[0-9]+}}(%esp), %edi512; SSE-X86-NEXT:    movl %esi, 12(%edi)513; SSE-X86-NEXT:    movl %edx, 8(%edi)514; SSE-X86-NEXT:    movl %ecx, 4(%edi)515; SSE-X86-NEXT:    movl %eax, (%edi)516; SSE-X86-NEXT:    popl %esi517; SSE-X86-NEXT:    popl %edi518; SSE-X86-NEXT:    retl519;520; SSE-X64-LABEL: extract_f128_1:521; SSE-X64:       # %bb.0:522; SSE-X64-NEXT:    movups %xmm1, (%rdi)523; SSE-X64-NEXT:    retq524;525; AVX-X86-LABEL: extract_f128_1:526; AVX-X86:       # %bb.0:527; AVX-X86-NEXT:    vmovups {{[0-9]+}}(%esp), %xmm0528; AVX-X86-NEXT:    movl {{[0-9]+}}(%esp), %eax529; AVX-X86-NEXT:    vmovups %xmm0, (%eax)530; AVX-X86-NEXT:    retl531;532; AVX-X64-LABEL: extract_f128_1:533; AVX-X64:       # %bb.0:534; AVX-X64-NEXT:    vmovups %xmm1, (%rdi)535; AVX-X64-NEXT:    retq536  %vecext = extractelement <2 x fp128> %foo, i32 1537  store fp128 %vecext, ptr %dst, align 1538  ret void539}540 541define void @extract_i8_undef(ptr nocapture %dst, <16 x i8> %foo) nounwind {542; X86-LABEL: extract_i8_undef:543; X86:       # %bb.0:544; X86-NEXT:    retl545;546; X64-LABEL: extract_i8_undef:547; X64:       # %bb.0:548; X64-NEXT:    retq549  %vecext = extractelement <16 x i8> %foo, i32 16 ; undef550  store i8 %vecext, ptr %dst, align 1551  ret void552}553 554define void @extract_i16_undef(ptr nocapture %dst, <8 x i16> %foo) nounwind {555; X86-LABEL: extract_i16_undef:556; X86:       # %bb.0:557; X86-NEXT:    retl558;559; X64-LABEL: extract_i16_undef:560; X64:       # %bb.0:561; X64-NEXT:    retq562  %vecext = extractelement <8 x i16> %foo, i32 9 ; undef563  store i16 %vecext, ptr %dst, align 1564  ret void565}566 567define void @extract_i32_undef(ptr nocapture %dst, <4 x i32> %foo) nounwind {568; X86-LABEL: extract_i32_undef:569; X86:       # %bb.0:570; X86-NEXT:    retl571;572; X64-LABEL: extract_i32_undef:573; X64:       # %bb.0:574; X64-NEXT:    retq575  %vecext = extractelement <4 x i32> %foo, i32 6 ; undef576  store i32 %vecext, ptr %dst, align 1577  ret void578}579 580define void @extract_i64_undef(ptr nocapture %dst, <2 x i64> %foo) nounwind {581; X86-LABEL: extract_i64_undef:582; X86:       # %bb.0:583; X86-NEXT:    retl584;585; X64-LABEL: extract_i64_undef:586; X64:       # %bb.0:587; X64-NEXT:    retq588  %vecext = extractelement <2 x i64> %foo, i32 2 ; undef589  store i64 %vecext, ptr %dst, align 1590  ret void591}592 593define void @extract_f32_undef(ptr nocapture %dst, <4 x float> %foo) nounwind {594; X86-LABEL: extract_f32_undef:595; X86:       # %bb.0:596; X86-NEXT:    retl597;598; X64-LABEL: extract_f32_undef:599; X64:       # %bb.0:600; X64-NEXT:    retq601  %vecext = extractelement <4 x float> %foo, i32 6 ; undef602  store float %vecext, ptr %dst, align 1603  ret void604}605 606define void @extract_f64_undef(ptr nocapture %dst, <2 x double> %foo) nounwind {607; X86-LABEL: extract_f64_undef:608; X86:       # %bb.0:609; X86-NEXT:    retl610;611; X64-LABEL: extract_f64_undef:612; X64:       # %bb.0:613; X64-NEXT:    retq614  %vecext = extractelement <2 x double> %foo, i32 2 ; undef615  store double %vecext, ptr %dst, align 1616  ret void617}618 619define void @extract_f128_undef(ptr nocapture %dst, <2 x fp128> %foo) nounwind {620; X86-LABEL: extract_f128_undef:621; X86:       # %bb.0:622; X86-NEXT:    retl623;624; X64-LABEL: extract_f128_undef:625; X64:       # %bb.0:626; X64-NEXT:    retq627  %vecext = extractelement <2 x fp128> %foo, i32 2 ; undef628  store fp128 %vecext, ptr %dst, align 1629  ret void630}631