247 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py2; RUN: llc -mtriple=x86_64-unknown-linux-gnu -o - -mattr=-x87,+sse,-sse2 %s | FileCheck --check-prefixes=X64SSE %s3; RUN: llc -mtriple=i686-unknown-linux-gnu -o - -mattr=-x87,+sse,-sse2 %s | FileCheck --check-prefixes=X86SSE %s4; RUN: llc -mtriple=x86_64-unknown-linux-gnu -o - -mattr=-x87,+sse2,-sse3 %s | FileCheck --check-prefixes=X64SSE2 %s5; RUN: llc -mtriple=i686-unknown-linux-gnu -o - -mattr=-x87,+sse2,-sse3 %s | FileCheck --check-prefixes=X86SSE2 %s6; RUN: llc -mtriple=x86_64-unknown-linux-gnu -o - -mattr=-x87,+avx,-avx2 %s | FileCheck --check-prefixes=X64AVX %s7; RUN: llc -mtriple=i686-unknown-linux-gnu -o - -mattr=-x87,+avx,-avx2 %s | FileCheck --check-prefixes=X86AVX %s8 9 10%struct.params = type { double, double }11 12define i32 @pr38738() {13; X64SSE-LABEL: pr38738:14; X64SSE: # %bb.0: # %entry15; X64SSE-NEXT: xorps %xmm0, %xmm016; X64SSE-NEXT: movaps %xmm0, -{{[0-9]+}}(%rsp)17; X64SSE-NEXT: movl $0, -{{[0-9]+}}(%rsp)18; X64SSE-NEXT: movl -{{[0-9]+}}(%rsp), %eax19; X64SSE-NEXT: retq20;21; X86SSE-LABEL: pr38738:22; X86SSE: # %bb.0: # %entry23; X86SSE-NEXT: subl $28, %esp24; X86SSE-NEXT: .cfi_def_cfa_offset 3225; X86SSE-NEXT: movl $0, {{[0-9]+}}(%esp)26; X86SSE-NEXT: movl $0, {{[0-9]+}}(%esp)27; X86SSE-NEXT: movl $0, {{[0-9]+}}(%esp)28; X86SSE-NEXT: movl $0, (%esp)29; X86SSE-NEXT: movl $0, {{[0-9]+}}(%esp)30; X86SSE-NEXT: movl {{[0-9]+}}(%esp), %eax31; X86SSE-NEXT: addl $28, %esp32; X86SSE-NEXT: .cfi_def_cfa_offset 433; X86SSE-NEXT: retl34;35; X64SSE2-LABEL: pr38738:36; X64SSE2: # %bb.0: # %entry37; X64SSE2-NEXT: xorps %xmm0, %xmm038; X64SSE2-NEXT: movaps %xmm0, -{{[0-9]+}}(%rsp)39; X64SSE2-NEXT: movl $0, -{{[0-9]+}}(%rsp)40; X64SSE2-NEXT: movl -{{[0-9]+}}(%rsp), %eax41; X64SSE2-NEXT: retq42;43; X86SSE2-LABEL: pr38738:44; X86SSE2: # %bb.0: # %entry45; X86SSE2-NEXT: subl $44, %esp46; X86SSE2-NEXT: .cfi_def_cfa_offset 4847; X86SSE2-NEXT: xorps %xmm0, %xmm048; X86SSE2-NEXT: movaps %xmm0, {{[0-9]+}}(%esp)49; X86SSE2-NEXT: movl $0, {{[0-9]+}}(%esp)50; X86SSE2-NEXT: movl {{[0-9]+}}(%esp), %eax51; X86SSE2-NEXT: addl $44, %esp52; X86SSE2-NEXT: .cfi_def_cfa_offset 453; X86SSE2-NEXT: retl54;55; X64AVX-LABEL: pr38738:56; X64AVX: # %bb.0: # %entry57; X64AVX-NEXT: vxorps %xmm0, %xmm0, %xmm058; X64AVX-NEXT: vmovaps %xmm0, -{{[0-9]+}}(%rsp)59; X64AVX-NEXT: movl $0, -{{[0-9]+}}(%rsp)60; X64AVX-NEXT: movl -{{[0-9]+}}(%rsp), %eax61; X64AVX-NEXT: retq62;63; X86AVX-LABEL: pr38738:64; X86AVX: # %bb.0: # %entry65; X86AVX-NEXT: subl $44, %esp66; X86AVX-NEXT: .cfi_def_cfa_offset 4867; X86AVX-NEXT: vxorps %xmm0, %xmm0, %xmm068; X86AVX-NEXT: vmovaps %xmm0, {{[0-9]+}}(%esp)69; X86AVX-NEXT: movl $0, {{[0-9]+}}(%esp)70; X86AVX-NEXT: movl {{[0-9]+}}(%esp), %eax71; X86AVX-NEXT: addl $44, %esp72; X86AVX-NEXT: .cfi_def_cfa_offset 473; X86AVX-NEXT: retl74entry:75 %retval = alloca i32, align 476 %dlg_sys_param = alloca %struct.params, align 877 %total_active_bw = alloca float, align 478 call void @llvm.memset.p0.i64(ptr align 8 %dlg_sys_param, i8 0, i64 16, i1 false)79 store float 0.000000e+00, ptr %total_active_bw, align 480 %0 = load i32, ptr %retval, align 481 ret i32 %082}83 84define void @tryset(ptr nocapture %x) {85; X64SSE-LABEL: tryset:86; X64SSE: # %bb.0:87; X64SSE-NEXT: movq $0, 56(%rdi)88; X64SSE-NEXT: movq $0, 48(%rdi)89; X64SSE-NEXT: movq $0, 40(%rdi)90; X64SSE-NEXT: movq $0, 32(%rdi)91; X64SSE-NEXT: movq $0, 24(%rdi)92; X64SSE-NEXT: movq $0, 16(%rdi)93; X64SSE-NEXT: movq $0, 8(%rdi)94; X64SSE-NEXT: movq $0, (%rdi)95; X64SSE-NEXT: retq96;97; X86SSE-LABEL: tryset:98; X86SSE: # %bb.0:99; X86SSE-NEXT: movl {{[0-9]+}}(%esp), %eax100; X86SSE-NEXT: movl $0, 60(%eax)101; X86SSE-NEXT: movl $0, 56(%eax)102; X86SSE-NEXT: movl $0, 52(%eax)103; X86SSE-NEXT: movl $0, 48(%eax)104; X86SSE-NEXT: movl $0, 44(%eax)105; X86SSE-NEXT: movl $0, 40(%eax)106; X86SSE-NEXT: movl $0, 36(%eax)107; X86SSE-NEXT: movl $0, 32(%eax)108; X86SSE-NEXT: movl $0, 28(%eax)109; X86SSE-NEXT: movl $0, 24(%eax)110; X86SSE-NEXT: movl $0, 20(%eax)111; X86SSE-NEXT: movl $0, 16(%eax)112; X86SSE-NEXT: movl $0, 12(%eax)113; X86SSE-NEXT: movl $0, 8(%eax)114; X86SSE-NEXT: movl $0, 4(%eax)115; X86SSE-NEXT: movl $0, (%eax)116; X86SSE-NEXT: retl117;118; X64SSE2-LABEL: tryset:119; X64SSE2: # %bb.0:120; X64SSE2-NEXT: movq $0, 56(%rdi)121; X64SSE2-NEXT: movq $0, 48(%rdi)122; X64SSE2-NEXT: movq $0, 40(%rdi)123; X64SSE2-NEXT: movq $0, 32(%rdi)124; X64SSE2-NEXT: movq $0, 24(%rdi)125; X64SSE2-NEXT: movq $0, 16(%rdi)126; X64SSE2-NEXT: movq $0, 8(%rdi)127; X64SSE2-NEXT: movq $0, (%rdi)128; X64SSE2-NEXT: retq129;130; X86SSE2-LABEL: tryset:131; X86SSE2: # %bb.0:132; X86SSE2-NEXT: movl {{[0-9]+}}(%esp), %eax133; X86SSE2-NEXT: xorps %xmm0, %xmm0134; X86SSE2-NEXT: movsd %xmm0, 56(%eax)135; X86SSE2-NEXT: movsd %xmm0, 48(%eax)136; X86SSE2-NEXT: movsd %xmm0, 40(%eax)137; X86SSE2-NEXT: movsd %xmm0, 32(%eax)138; X86SSE2-NEXT: movsd %xmm0, 24(%eax)139; X86SSE2-NEXT: movsd %xmm0, 16(%eax)140; X86SSE2-NEXT: movsd %xmm0, 8(%eax)141; X86SSE2-NEXT: movsd %xmm0, (%eax)142; X86SSE2-NEXT: retl143;144; X64AVX-LABEL: tryset:145; X64AVX: # %bb.0:146; X64AVX-NEXT: vxorps %xmm0, %xmm0, %xmm0147; X64AVX-NEXT: vmovups %ymm0, 32(%rdi)148; X64AVX-NEXT: vmovups %ymm0, (%rdi)149; X64AVX-NEXT: vzeroupper150; X64AVX-NEXT: retq151;152; X86AVX-LABEL: tryset:153; X86AVX: # %bb.0:154; X86AVX-NEXT: movl {{[0-9]+}}(%esp), %eax155; X86AVX-NEXT: vxorps %xmm0, %xmm0, %xmm0156; X86AVX-NEXT: vmovups %ymm0, 32(%eax)157; X86AVX-NEXT: vmovups %ymm0, (%eax)158; X86AVX-NEXT: vzeroupper159; X86AVX-NEXT: retl160 tail call void @llvm.memset.p0.i64(ptr align 1 %x, i8 0, i64 64, i1 false)161 ret void162}163 164define void @trycpy(ptr nocapture %x, ptr nocapture readonly %y) {165; X64SSE-LABEL: trycpy:166; X64SSE: # %bb.0:167; X64SSE-NEXT: movq 24(%rsi), %rax168; X64SSE-NEXT: movq %rax, 24(%rdi)169; X64SSE-NEXT: movq 16(%rsi), %rax170; X64SSE-NEXT: movq %rax, 16(%rdi)171; X64SSE-NEXT: movq (%rsi), %rax172; X64SSE-NEXT: movq 8(%rsi), %rcx173; X64SSE-NEXT: movq %rcx, 8(%rdi)174; X64SSE-NEXT: movq %rax, (%rdi)175; X64SSE-NEXT: retq176;177; X86SSE-LABEL: trycpy:178; X86SSE: # %bb.0:179; X86SSE-NEXT: movl {{[0-9]+}}(%esp), %eax180; X86SSE-NEXT: movl {{[0-9]+}}(%esp), %ecx181; X86SSE-NEXT: movl 28(%ecx), %edx182; X86SSE-NEXT: movl %edx, 28(%eax)183; X86SSE-NEXT: movl 24(%ecx), %edx184; X86SSE-NEXT: movl %edx, 24(%eax)185; X86SSE-NEXT: movl 20(%ecx), %edx186; X86SSE-NEXT: movl %edx, 20(%eax)187; X86SSE-NEXT: movl 16(%ecx), %edx188; X86SSE-NEXT: movl %edx, 16(%eax)189; X86SSE-NEXT: movl 12(%ecx), %edx190; X86SSE-NEXT: movl %edx, 12(%eax)191; X86SSE-NEXT: movl 8(%ecx), %edx192; X86SSE-NEXT: movl %edx, 8(%eax)193; X86SSE-NEXT: movl (%ecx), %edx194; X86SSE-NEXT: movl 4(%ecx), %ecx195; X86SSE-NEXT: movl %ecx, 4(%eax)196; X86SSE-NEXT: movl %edx, (%eax)197; X86SSE-NEXT: retl198;199; X64SSE2-LABEL: trycpy:200; X64SSE2: # %bb.0:201; X64SSE2-NEXT: movq 24(%rsi), %rax202; X64SSE2-NEXT: movq %rax, 24(%rdi)203; X64SSE2-NEXT: movq 16(%rsi), %rax204; X64SSE2-NEXT: movq %rax, 16(%rdi)205; X64SSE2-NEXT: movq (%rsi), %rax206; X64SSE2-NEXT: movq 8(%rsi), %rcx207; X64SSE2-NEXT: movq %rcx, 8(%rdi)208; X64SSE2-NEXT: movq %rax, (%rdi)209; X64SSE2-NEXT: retq210;211; X86SSE2-LABEL: trycpy:212; X86SSE2: # %bb.0:213; X86SSE2-NEXT: movl {{[0-9]+}}(%esp), %eax214; X86SSE2-NEXT: movl {{[0-9]+}}(%esp), %ecx215; X86SSE2-NEXT: movsd {{.*#+}} xmm0 = mem[0],zero216; X86SSE2-NEXT: movsd %xmm0, 24(%eax)217; X86SSE2-NEXT: movsd {{.*#+}} xmm0 = mem[0],zero218; X86SSE2-NEXT: movsd %xmm0, 16(%eax)219; X86SSE2-NEXT: movsd {{.*#+}} xmm0 = mem[0],zero220; X86SSE2-NEXT: movsd {{.*#+}} xmm1 = mem[0],zero221; X86SSE2-NEXT: movsd %xmm1, 8(%eax)222; X86SSE2-NEXT: movsd %xmm0, (%eax)223; X86SSE2-NEXT: retl224;225; X64AVX-LABEL: trycpy:226; X64AVX: # %bb.0:227; X64AVX-NEXT: vmovups (%rsi), %ymm0228; X64AVX-NEXT: vmovups %ymm0, (%rdi)229; X64AVX-NEXT: vzeroupper230; X64AVX-NEXT: retq231;232; X86AVX-LABEL: trycpy:233; X86AVX: # %bb.0:234; X86AVX-NEXT: movl {{[0-9]+}}(%esp), %eax235; X86AVX-NEXT: movl {{[0-9]+}}(%esp), %ecx236; X86AVX-NEXT: vmovups (%ecx), %ymm0237; X86AVX-NEXT: vmovups %ymm0, (%eax)238; X86AVX-NEXT: vzeroupper239; X86AVX-NEXT: retl240 tail call void @llvm.memcpy.p0.p0.i64(ptr align 1 %x, ptr align 1 %y, i64 32, i1 false)241 ret void242}243 244declare void @llvm.memset.p0.i64(ptr nocapture writeonly, i8, i64, i1) argmemonly nounwind245declare void @llvm.memcpy.p0.p0.i64(ptr nocapture writeonly, ptr nocapture readonly, i64, i1) #2246 247