brintos

brintos / llvm-project-archived public Read only

0
0
Text · 68.3 KiB · 6943622 Raw
1635 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py2; RUN: llc < %s -mtriple=x86_64-linux -mattr=+sse2 -mcpu=nehalem | FileCheck %s --check-prefixes=SSE,SSE-LINUX3; RUN: llc < %s -mtriple=x86_64-win32 -mattr=+sse2 -mcpu=nehalem | FileCheck %s --check-prefixes=SSE,SSE-WIN4; RUN: llc < %s -mtriple=x86_64-win32 -mattr=+avx -mcpu=corei7-avx | FileCheck %s --check-prefixes=AVX,AVX15; RUN: llc < %s -mtriple=x86_64-win32 -mattr=+avx512vl -mcpu=skx | FileCheck %s --check-prefixes=AVX,AVX512VL6 7define dso_local double @t1(ptr nocapture %x) nounwind readonly ssp {8; SSE-LABEL: t1:9; SSE:       # %bb.0: # %entry10; SSE-NEXT:    movss {{.*#+}} xmm0 = mem[0],zero,zero,zero11; SSE-NEXT:    cvtss2sd %xmm0, %xmm012; SSE-NEXT:    retq13;14; AVX-LABEL: t1:15; AVX:       # %bb.0: # %entry16; AVX-NEXT:    vmovss {{.*#+}} xmm0 = mem[0],zero,zero,zero17; AVX-NEXT:    vcvtss2sd %xmm0, %xmm0, %xmm018; AVX-NEXT:    retq19entry:20 21  %0 = load float, ptr %x, align 422  %1 = fpext float %0 to double23  ret double %124}25 26define dso_local float @t2(ptr nocapture %x) nounwind readonly ssp optsize {27; SSE-LINUX-LABEL: t2:28; SSE-LINUX:       # %bb.0: # %entry29; SSE-LINUX-NEXT:    cvtsd2ss (%rdi), %xmm030; SSE-LINUX-NEXT:    retq31;32; SSE-WIN-LABEL: t2:33; SSE-WIN:       # %bb.0: # %entry34; SSE-WIN-NEXT:    cvtsd2ss (%rcx), %xmm035; SSE-WIN-NEXT:    retq36;37; AVX-LABEL: t2:38; AVX:       # %bb.0: # %entry39; AVX-NEXT:    vcvtsd2ss (%rcx), %xmm5, %xmm040; AVX-NEXT:    retq41entry:42  %0 = load double, ptr %x, align 843  %1 = fptrunc double %0 to float44  ret float %145}46 47define dso_local float @squirtf(ptr %x) nounwind {48; SSE-LABEL: squirtf:49; SSE:       # %bb.0: # %entry50; SSE-NEXT:    movss {{.*#+}} xmm0 = mem[0],zero,zero,zero51; SSE-NEXT:    sqrtss %xmm0, %xmm052; SSE-NEXT:    retq53;54; AVX-LABEL: squirtf:55; AVX:       # %bb.0: # %entry56; AVX-NEXT:    vmovss {{.*#+}} xmm0 = mem[0],zero,zero,zero57; AVX-NEXT:    vsqrtss %xmm0, %xmm0, %xmm058; AVX-NEXT:    retq59entry:60  %z = load float, ptr %x61  %t = call float @llvm.sqrt.f32(float %z)62  ret float %t63}64 65define dso_local double @squirt(ptr %x) nounwind {66; SSE-LABEL: squirt:67; SSE:       # %bb.0: # %entry68; SSE-NEXT:    movsd {{.*#+}} xmm0 = mem[0],zero69; SSE-NEXT:    sqrtsd %xmm0, %xmm070; SSE-NEXT:    retq71;72; AVX-LABEL: squirt:73; AVX:       # %bb.0: # %entry74; AVX-NEXT:    vmovsd {{.*#+}} xmm0 = mem[0],zero75; AVX-NEXT:    vsqrtsd %xmm0, %xmm0, %xmm076; AVX-NEXT:    retq77entry:78  %z = load double, ptr %x79  %t = call double @llvm.sqrt.f64(double %z)80  ret double %t81}82 83define dso_local float @squirtf_size(ptr %x) nounwind optsize {84; SSE-LINUX-LABEL: squirtf_size:85; SSE-LINUX:       # %bb.0: # %entry86; SSE-LINUX-NEXT:    sqrtss (%rdi), %xmm087; SSE-LINUX-NEXT:    retq88;89; SSE-WIN-LABEL: squirtf_size:90; SSE-WIN:       # %bb.0: # %entry91; SSE-WIN-NEXT:    sqrtss (%rcx), %xmm092; SSE-WIN-NEXT:    retq93;94; AVX-LABEL: squirtf_size:95; AVX:       # %bb.0: # %entry96; AVX-NEXT:    vsqrtss (%rcx), %xmm5, %xmm097; AVX-NEXT:    retq98entry:99  %z = load float, ptr %x100  %t = call float @llvm.sqrt.f32(float %z)101  ret float %t102}103 104define dso_local double @squirt_size(ptr %x) nounwind optsize {105; SSE-LINUX-LABEL: squirt_size:106; SSE-LINUX:       # %bb.0: # %entry107; SSE-LINUX-NEXT:    sqrtsd (%rdi), %xmm0108; SSE-LINUX-NEXT:    retq109;110; SSE-WIN-LABEL: squirt_size:111; SSE-WIN:       # %bb.0: # %entry112; SSE-WIN-NEXT:    sqrtsd (%rcx), %xmm0113; SSE-WIN-NEXT:    retq114;115; AVX-LABEL: squirt_size:116; AVX:       # %bb.0: # %entry117; AVX-NEXT:    vsqrtsd (%rcx), %xmm5, %xmm0118; AVX-NEXT:    retq119entry:120  %z = load double, ptr %x121  %t = call double @llvm.sqrt.f64(double %z)122  ret double %t123}124 125declare float @llvm.sqrt.f32(float)126declare double @llvm.sqrt.f64(double)127 128; This loop contains two cvtsi2ss instructions that update the same xmm129; register.  Verify that the break false dependency fix pass breaks those130; dependencies by inserting xorps instructions.131;132define dso_local float @loopdep1(i32 %m) nounwind uwtable readnone ssp {133; SSE-LINUX-LABEL: loopdep1:134; SSE-LINUX:       # %bb.0: # %entry135; SSE-LINUX-NEXT:    testl %edi, %edi136; SSE-LINUX-NEXT:    je .LBB6_1137; SSE-LINUX-NEXT:  # %bb.2: # %for.body.preheader138; SSE-LINUX-NEXT:    movl $1, %eax139; SSE-LINUX-NEXT:    xorps %xmm0, %xmm0140; SSE-LINUX-NEXT:    xorps %xmm1, %xmm1141; SSE-LINUX-NEXT:    .p2align 4142; SSE-LINUX-NEXT:  .LBB6_3: # %for.body143; SSE-LINUX-NEXT:    # =>This Inner Loop Header: Depth=1144; SSE-LINUX-NEXT:    xorps %xmm2, %xmm2145; SSE-LINUX-NEXT:    cvtsi2ss %eax, %xmm2146; SSE-LINUX-NEXT:    xorps %xmm3, %xmm3147; SSE-LINUX-NEXT:    cvtsi2ss %edi, %xmm3148; SSE-LINUX-NEXT:    addss %xmm2, %xmm0149; SSE-LINUX-NEXT:    addss %xmm3, %xmm1150; SSE-LINUX-NEXT:    incl %eax151; SSE-LINUX-NEXT:    decl %edi152; SSE-LINUX-NEXT:    jne .LBB6_3153; SSE-LINUX-NEXT:  # %bb.4: # %for.end154; SSE-LINUX-NEXT:    subss %xmm1, %xmm0155; SSE-LINUX-NEXT:    retq156; SSE-LINUX-NEXT:  .LBB6_1:157; SSE-LINUX-NEXT:    xorps %xmm0, %xmm0158; SSE-LINUX-NEXT:    xorps %xmm1, %xmm1159; SSE-LINUX-NEXT:    subss %xmm1, %xmm0160; SSE-LINUX-NEXT:    retq161;162; SSE-WIN-LABEL: loopdep1:163; SSE-WIN:       # %bb.0: # %entry164; SSE-WIN-NEXT:    testl %ecx, %ecx165; SSE-WIN-NEXT:    je .LBB6_1166; SSE-WIN-NEXT:  # %bb.2: # %for.body.preheader167; SSE-WIN-NEXT:    movl $1, %eax168; SSE-WIN-NEXT:    xorps %xmm0, %xmm0169; SSE-WIN-NEXT:    xorps %xmm1, %xmm1170; SSE-WIN-NEXT:    .p2align 4171; SSE-WIN-NEXT:  .LBB6_3: # %for.body172; SSE-WIN-NEXT:    # =>This Inner Loop Header: Depth=1173; SSE-WIN-NEXT:    xorps %xmm2, %xmm2174; SSE-WIN-NEXT:    cvtsi2ss %eax, %xmm2175; SSE-WIN-NEXT:    xorps %xmm3, %xmm3176; SSE-WIN-NEXT:    cvtsi2ss %ecx, %xmm3177; SSE-WIN-NEXT:    addss %xmm2, %xmm0178; SSE-WIN-NEXT:    addss %xmm3, %xmm1179; SSE-WIN-NEXT:    incl %eax180; SSE-WIN-NEXT:    decl %ecx181; SSE-WIN-NEXT:    jne .LBB6_3182; SSE-WIN-NEXT:  # %bb.4: # %for.end183; SSE-WIN-NEXT:    subss %xmm1, %xmm0184; SSE-WIN-NEXT:    retq185; SSE-WIN-NEXT:  .LBB6_1:186; SSE-WIN-NEXT:    xorps %xmm0, %xmm0187; SSE-WIN-NEXT:    xorps %xmm1, %xmm1188; SSE-WIN-NEXT:    subss %xmm1, %xmm0189; SSE-WIN-NEXT:    retq190;191; AVX1-LABEL: loopdep1:192; AVX1:       # %bb.0: # %entry193; AVX1-NEXT:    testl %ecx, %ecx194; AVX1-NEXT:    je .LBB6_1195; AVX1-NEXT:  # %bb.2: # %for.body.preheader196; AVX1-NEXT:    movl $1, %eax197; AVX1-NEXT:    vxorps %xmm0, %xmm0, %xmm0198; AVX1-NEXT:    vxorps %xmm1, %xmm1, %xmm1199; AVX1-NEXT:    .p2align 4200; AVX1-NEXT:  .LBB6_3: # %for.body201; AVX1-NEXT:    # =>This Inner Loop Header: Depth=1202; AVX1-NEXT:    vcvtsi2ss %eax, %xmm5, %xmm2203; AVX1-NEXT:    vcvtsi2ss %ecx, %xmm5, %xmm3204; AVX1-NEXT:    vaddss %xmm2, %xmm0, %xmm0205; AVX1-NEXT:    vaddss %xmm3, %xmm1, %xmm1206; AVX1-NEXT:    incl %eax207; AVX1-NEXT:    decl %ecx208; AVX1-NEXT:    jne .LBB6_3209; AVX1-NEXT:  # %bb.4: # %for.end210; AVX1-NEXT:    vsubss %xmm1, %xmm0, %xmm0211; AVX1-NEXT:    retq212; AVX1-NEXT:  .LBB6_1:213; AVX1-NEXT:    vxorps %xmm0, %xmm0, %xmm0214; AVX1-NEXT:    vxorps %xmm1, %xmm1, %xmm1215; AVX1-NEXT:    vsubss %xmm1, %xmm0, %xmm0216; AVX1-NEXT:    retq217;218; AVX512VL-LABEL: loopdep1:219; AVX512VL:       # %bb.0: # %entry220; AVX512VL-NEXT:    testl %ecx, %ecx221; AVX512VL-NEXT:    je .LBB6_1222; AVX512VL-NEXT:  # %bb.2: # %for.body.preheader223; AVX512VL-NEXT:    movl $1, %eax224; AVX512VL-NEXT:    vxorps %xmm0, %xmm0, %xmm0225; AVX512VL-NEXT:    vxorps %xmm1, %xmm1, %xmm1226; AVX512VL-NEXT:    .p2align 4227; AVX512VL-NEXT:  .LBB6_3: # %for.body228; AVX512VL-NEXT:    # =>This Inner Loop Header: Depth=1229; AVX512VL-NEXT:    vcvtsi2ss %eax, %xmm5, %xmm2230; AVX512VL-NEXT:    vaddss %xmm2, %xmm0, %xmm0231; AVX512VL-NEXT:    vcvtsi2ss %ecx, %xmm5, %xmm2232; AVX512VL-NEXT:    vaddss %xmm2, %xmm1, %xmm1233; AVX512VL-NEXT:    incl %eax234; AVX512VL-NEXT:    decl %ecx235; AVX512VL-NEXT:    jne .LBB6_3236; AVX512VL-NEXT:  # %bb.4: # %for.end237; AVX512VL-NEXT:    vsubss %xmm1, %xmm0, %xmm0238; AVX512VL-NEXT:    retq239; AVX512VL-NEXT:  .LBB6_1:240; AVX512VL-NEXT:    vxorps %xmm0, %xmm0, %xmm0241; AVX512VL-NEXT:    vxorps %xmm1, %xmm1, %xmm1242; AVX512VL-NEXT:    vsubss %xmm1, %xmm0, %xmm0243; AVX512VL-NEXT:    retq244entry:245  %tobool3 = icmp eq i32 %m, 0246  br i1 %tobool3, label %for.end, label %for.body247 248for.body:                                         ; preds = %entry, %for.body249  %m.addr.07 = phi i32 [ %dec, %for.body ], [ %m, %entry ]250  %s1.06 = phi float [ %add, %for.body ], [ 0.000000e+00, %entry ]251  %s2.05 = phi float [ %add2, %for.body ], [ 0.000000e+00, %entry ]252  %n.04 = phi i32 [ %inc, %for.body ], [ 1, %entry ]253  %conv = sitofp i32 %n.04 to float254  %add = fadd float %s1.06, %conv255  %conv1 = sitofp i32 %m.addr.07 to float256  %add2 = fadd float %s2.05, %conv1257  %inc = add nsw i32 %n.04, 1258  %dec = add nsw i32 %m.addr.07, -1259  %tobool = icmp eq i32 %dec, 0260  br i1 %tobool, label %for.end, label %for.body261 262for.end:                                          ; preds = %for.body, %entry263  %s1.0.lcssa = phi float [ 0.000000e+00, %entry ], [ %add, %for.body ]264  %s2.0.lcssa = phi float [ 0.000000e+00, %entry ], [ %add2, %for.body ]265  %sub = fsub float %s1.0.lcssa, %s2.0.lcssa266  ret float %sub267}268 269; rdar:15221834 False AVX register dependencies cause 5x slowdown on270; flops-6. Make sure the unused register read by vcvtsi2sd is zeroed271; to avoid cyclic dependence on a write to the same register in a272; previous iteration.273 274define i64 @loopdep2(ptr nocapture %x, ptr nocapture %y) nounwind {275; SSE-LINUX-LABEL: loopdep2:276; SSE-LINUX:       # %bb.0: # %entry277; SSE-LINUX-NEXT:    movq (%rdi), %rax278; SSE-LINUX-NEXT:    movl $1, %ecx279; SSE-LINUX-NEXT:    .p2align 4280; SSE-LINUX-NEXT:  .LBB7_1: # %loop281; SSE-LINUX-NEXT:    # =>This Inner Loop Header: Depth=1282; SSE-LINUX-NEXT:    xorps %xmm0, %xmm0283; SSE-LINUX-NEXT:    cvtsi2sd %rcx, %xmm0284; SSE-LINUX-NEXT:    movsd %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 8-byte Spill285; SSE-LINUX-NEXT:    #APP286; SSE-LINUX-NEXT:    #NO_APP287; SSE-LINUX-NEXT:    movsd {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 8-byte Reload288; SSE-LINUX-NEXT:    # xmm0 = mem[0],zero289; SSE-LINUX-NEXT:    addsd (%rsi), %xmm0290; SSE-LINUX-NEXT:    cvttsd2si %xmm0, %rdx291; SSE-LINUX-NEXT:    addq %rdx, %rax292; SSE-LINUX-NEXT:    incq %rcx293; SSE-LINUX-NEXT:    cmpq $156250000, %rcx # imm = 0x9502F90294; SSE-LINUX-NEXT:    jne .LBB7_1295; SSE-LINUX-NEXT:  # %bb.2: # %ret296; SSE-LINUX-NEXT:    retq297;298; SSE-WIN-LABEL: loopdep2:299; SSE-WIN:       # %bb.0: # %entry300; SSE-WIN-NEXT:    subq $184, %rsp301; SSE-WIN-NEXT:    movaps %xmm15, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill302; SSE-WIN-NEXT:    movaps %xmm14, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill303; SSE-WIN-NEXT:    movaps %xmm13, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill304; SSE-WIN-NEXT:    movaps %xmm12, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill305; SSE-WIN-NEXT:    movaps %xmm11, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill306; SSE-WIN-NEXT:    movaps %xmm10, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill307; SSE-WIN-NEXT:    movaps %xmm9, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill308; SSE-WIN-NEXT:    movaps %xmm8, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill309; SSE-WIN-NEXT:    movaps %xmm7, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill310; SSE-WIN-NEXT:    movaps %xmm6, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill311; SSE-WIN-NEXT:    movq (%rcx), %rax312; SSE-WIN-NEXT:    movl $1, %ecx313; SSE-WIN-NEXT:    .p2align 4314; SSE-WIN-NEXT:  .LBB7_1: # %loop315; SSE-WIN-NEXT:    # =>This Inner Loop Header: Depth=1316; SSE-WIN-NEXT:    xorps %xmm0, %xmm0317; SSE-WIN-NEXT:    cvtsi2sd %rcx, %xmm0318; SSE-WIN-NEXT:    movsd %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 8-byte Spill319; SSE-WIN-NEXT:    #APP320; SSE-WIN-NEXT:    #NO_APP321; SSE-WIN-NEXT:    movsd {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 8-byte Reload322; SSE-WIN-NEXT:    # xmm0 = mem[0],zero323; SSE-WIN-NEXT:    addsd (%rdx), %xmm0324; SSE-WIN-NEXT:    cvttsd2si %xmm0, %r8325; SSE-WIN-NEXT:    addq %r8, %rax326; SSE-WIN-NEXT:    incq %rcx327; SSE-WIN-NEXT:    cmpq $156250000, %rcx # imm = 0x9502F90328; SSE-WIN-NEXT:    jne .LBB7_1329; SSE-WIN-NEXT:  # %bb.2: # %ret330; SSE-WIN-NEXT:    movaps {{[-0-9]+}}(%r{{[sb]}}p), %xmm6 # 16-byte Reload331; SSE-WIN-NEXT:    movaps {{[-0-9]+}}(%r{{[sb]}}p), %xmm7 # 16-byte Reload332; SSE-WIN-NEXT:    movaps {{[-0-9]+}}(%r{{[sb]}}p), %xmm8 # 16-byte Reload333; SSE-WIN-NEXT:    movaps {{[-0-9]+}}(%r{{[sb]}}p), %xmm9 # 16-byte Reload334; SSE-WIN-NEXT:    movaps {{[-0-9]+}}(%r{{[sb]}}p), %xmm10 # 16-byte Reload335; SSE-WIN-NEXT:    movaps {{[-0-9]+}}(%r{{[sb]}}p), %xmm11 # 16-byte Reload336; SSE-WIN-NEXT:    movaps {{[-0-9]+}}(%r{{[sb]}}p), %xmm12 # 16-byte Reload337; SSE-WIN-NEXT:    movaps {{[-0-9]+}}(%r{{[sb]}}p), %xmm13 # 16-byte Reload338; SSE-WIN-NEXT:    movaps {{[-0-9]+}}(%r{{[sb]}}p), %xmm14 # 16-byte Reload339; SSE-WIN-NEXT:    movaps {{[-0-9]+}}(%r{{[sb]}}p), %xmm15 # 16-byte Reload340; SSE-WIN-NEXT:    addq $184, %rsp341; SSE-WIN-NEXT:    retq342;343; AVX-LABEL: loopdep2:344; AVX:       # %bb.0: # %entry345; AVX-NEXT:    subq $184, %rsp346; AVX-NEXT:    vmovaps %xmm15, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill347; AVX-NEXT:    vmovaps %xmm14, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill348; AVX-NEXT:    vmovaps %xmm13, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill349; AVX-NEXT:    vmovaps %xmm12, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill350; AVX-NEXT:    vmovaps %xmm11, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill351; AVX-NEXT:    vmovaps %xmm10, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill352; AVX-NEXT:    vmovaps %xmm9, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill353; AVX-NEXT:    vmovaps %xmm8, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill354; AVX-NEXT:    vmovaps %xmm7, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill355; AVX-NEXT:    vmovaps %xmm6, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill356; AVX-NEXT:    movq (%rcx), %rax357; AVX-NEXT:    movl $1, %ecx358; AVX-NEXT:    .p2align 4359; AVX-NEXT:  .LBB7_1: # %loop360; AVX-NEXT:    # =>This Inner Loop Header: Depth=1361; AVX-NEXT:    vxorps %xmm5, %xmm5, %xmm5362; AVX-NEXT:    vcvtsi2sd %rcx, %xmm5, %xmm0363; AVX-NEXT:    vmovsd %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 8-byte Spill364; AVX-NEXT:    #APP365; AVX-NEXT:    #NO_APP366; AVX-NEXT:    vmovsd {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 8-byte Reload367; AVX-NEXT:    # xmm0 = mem[0],zero368; AVX-NEXT:    vaddsd (%rdx), %xmm0, %xmm0369; AVX-NEXT:    vcvttsd2si %xmm0, %r8370; AVX-NEXT:    addq %r8, %rax371; AVX-NEXT:    incq %rcx372; AVX-NEXT:    cmpq $156250000, %rcx # imm = 0x9502F90373; AVX-NEXT:    jne .LBB7_1374; AVX-NEXT:  # %bb.2: # %ret375; AVX-NEXT:    vmovaps {{[-0-9]+}}(%r{{[sb]}}p), %xmm6 # 16-byte Reload376; AVX-NEXT:    vmovaps {{[-0-9]+}}(%r{{[sb]}}p), %xmm7 # 16-byte Reload377; AVX-NEXT:    vmovaps {{[-0-9]+}}(%r{{[sb]}}p), %xmm8 # 16-byte Reload378; AVX-NEXT:    vmovaps {{[-0-9]+}}(%r{{[sb]}}p), %xmm9 # 16-byte Reload379; AVX-NEXT:    vmovaps {{[-0-9]+}}(%r{{[sb]}}p), %xmm10 # 16-byte Reload380; AVX-NEXT:    vmovaps {{[-0-9]+}}(%r{{[sb]}}p), %xmm11 # 16-byte Reload381; AVX-NEXT:    vmovaps {{[-0-9]+}}(%r{{[sb]}}p), %xmm12 # 16-byte Reload382; AVX-NEXT:    vmovaps {{[-0-9]+}}(%r{{[sb]}}p), %xmm13 # 16-byte Reload383; AVX-NEXT:    vmovaps {{[-0-9]+}}(%r{{[sb]}}p), %xmm14 # 16-byte Reload384; AVX-NEXT:    vmovaps {{[-0-9]+}}(%r{{[sb]}}p), %xmm15 # 16-byte Reload385; AVX-NEXT:    addq $184, %rsp386; AVX-NEXT:    retq387entry:388  %vx = load i64, ptr %x389  br label %loop390loop:391  %i = phi i64 [ 1, %entry ], [ %inc, %loop ]392  %s1 = phi i64 [ %vx, %entry ], [ %s2, %loop ]393  %fi = sitofp i64 %i to double394  tail call void asm sideeffect "", "~{xmm0},~{xmm1},~{xmm2},~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{xmm16},~{xmm17},~{xmm18},~{xmm19},~{xmm20},~{xmm21},~{xmm22},~{xmm23},~{xmm24},~{xmm25},~{xmm26},~{xmm27},~{xmm28},~{xmm29},~{xmm30},~{xmm31},~{dirflag},~{fpsr},~{flags}"()395  %vy = load double, ptr %y396  %fipy = fadd double %fi, %vy397  %iipy = fptosi double %fipy to i64398  %s2 = add i64 %s1, %iipy399  %inc = add nsw i64 %i, 1400  %exitcond = icmp eq i64 %inc, 156250000401  br i1 %exitcond, label %ret, label %loop402ret:403  ret i64 %s2404}405 406; This loop contains a cvtsi2sd instruction that has a loop-carried407; false dependency on an xmm that is modified by other scalar instructions408; that follow it in the loop. Additionally, the source of convert is a409; memory operand. Verify the break false dependency fix pass breaks this410; dependency by inserting a xor before the convert.411@x = common dso_local global [1024 x double] zeroinitializer, align 16412@y = common dso_local global [1024 x double] zeroinitializer, align 16413@z = common dso_local global [1024 x double] zeroinitializer, align 16414@w = common dso_local global [1024 x double] zeroinitializer, align 16415@v = common dso_local global [1024 x i32] zeroinitializer, align 16416 417define dso_local void @loopdep3() {418; SSE-LINUX-LABEL: loopdep3:419; SSE-LINUX:       # %bb.0: # %entry420; SSE-LINUX-NEXT:    xorl %eax, %eax421; SSE-LINUX-NEXT:    .p2align 4422; SSE-LINUX-NEXT:  .LBB8_1: # %for.cond1.preheader423; SSE-LINUX-NEXT:    # =>This Loop Header: Depth=1424; SSE-LINUX-NEXT:    # Child Loop BB8_2 Depth 2425; SSE-LINUX-NEXT:    movq $-4096, %rcx # imm = 0xF000426; SSE-LINUX-NEXT:    .p2align 4427; SSE-LINUX-NEXT:  .LBB8_2: # %for.body3428; SSE-LINUX-NEXT:    # Parent Loop BB8_1 Depth=1429; SSE-LINUX-NEXT:    # => This Inner Loop Header: Depth=2430; SSE-LINUX-NEXT:    xorps %xmm0, %xmm0431; SSE-LINUX-NEXT:    cvtsi2sdl v+4096(%rcx), %xmm0432; SSE-LINUX-NEXT:    mulsd x+8192(%rcx,%rcx), %xmm0433; SSE-LINUX-NEXT:    mulsd y+8192(%rcx,%rcx), %xmm0434; SSE-LINUX-NEXT:    mulsd z+8192(%rcx,%rcx), %xmm0435; SSE-LINUX-NEXT:    movsd %xmm0, w+8192(%rcx,%rcx)436; SSE-LINUX-NEXT:    #APP437; SSE-LINUX-NEXT:    #NO_APP438; SSE-LINUX-NEXT:    addq $4, %rcx439; SSE-LINUX-NEXT:    jne .LBB8_2440; SSE-LINUX-NEXT:  # %bb.3: # %for.inc14441; SSE-LINUX-NEXT:    # in Loop: Header=BB8_1 Depth=1442; SSE-LINUX-NEXT:    incl %eax443; SSE-LINUX-NEXT:    cmpl $100000, %eax # imm = 0x186A0444; SSE-LINUX-NEXT:    jne .LBB8_1445; SSE-LINUX-NEXT:  # %bb.4: # %for.end16446; SSE-LINUX-NEXT:    retq447;448; SSE-WIN-LABEL: loopdep3:449; SSE-WIN:       # %bb.0: # %entry450; SSE-WIN-NEXT:    pushq %rsi451; SSE-WIN-NEXT:    .seh_pushreg %rsi452; SSE-WIN-NEXT:    subq $160, %rsp453; SSE-WIN-NEXT:    .seh_stackalloc 160454; SSE-WIN-NEXT:    movaps %xmm15, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill455; SSE-WIN-NEXT:    .seh_savexmm %xmm15, 144456; SSE-WIN-NEXT:    movaps %xmm14, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill457; SSE-WIN-NEXT:    .seh_savexmm %xmm14, 128458; SSE-WIN-NEXT:    movaps %xmm13, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill459; SSE-WIN-NEXT:    .seh_savexmm %xmm13, 112460; SSE-WIN-NEXT:    movaps %xmm12, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill461; SSE-WIN-NEXT:    .seh_savexmm %xmm12, 96462; SSE-WIN-NEXT:    movaps %xmm11, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill463; SSE-WIN-NEXT:    .seh_savexmm %xmm11, 80464; SSE-WIN-NEXT:    movaps %xmm10, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill465; SSE-WIN-NEXT:    .seh_savexmm %xmm10, 64466; SSE-WIN-NEXT:    movaps %xmm9, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill467; SSE-WIN-NEXT:    .seh_savexmm %xmm9, 48468; SSE-WIN-NEXT:    movaps %xmm8, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill469; SSE-WIN-NEXT:    .seh_savexmm %xmm8, 32470; SSE-WIN-NEXT:    movaps %xmm7, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill471; SSE-WIN-NEXT:    .seh_savexmm %xmm7, 16472; SSE-WIN-NEXT:    movaps %xmm6, (%rsp) # 16-byte Spill473; SSE-WIN-NEXT:    .seh_savexmm %xmm6, 0474; SSE-WIN-NEXT:    .seh_endprologue475; SSE-WIN-NEXT:    xorl %eax, %eax476; SSE-WIN-NEXT:    leaq v(%rip), %rcx477; SSE-WIN-NEXT:    leaq x(%rip), %rdx478; SSE-WIN-NEXT:    leaq y(%rip), %r8479; SSE-WIN-NEXT:    leaq z(%rip), %r9480; SSE-WIN-NEXT:    leaq w(%rip), %r10481; SSE-WIN-NEXT:    .p2align 4482; SSE-WIN-NEXT:  .LBB8_1: # %for.cond1.preheader483; SSE-WIN-NEXT:    # =>This Loop Header: Depth=1484; SSE-WIN-NEXT:    # Child Loop BB8_2 Depth 2485; SSE-WIN-NEXT:    movq %rcx, %r11486; SSE-WIN-NEXT:    xorl %esi, %esi487; SSE-WIN-NEXT:    .p2align 4488; SSE-WIN-NEXT:  .LBB8_2: # %for.body3489; SSE-WIN-NEXT:    # Parent Loop BB8_1 Depth=1490; SSE-WIN-NEXT:    # => This Inner Loop Header: Depth=2491; SSE-WIN-NEXT:    xorps %xmm0, %xmm0492; SSE-WIN-NEXT:    cvtsi2sdl (%r11), %xmm0493; SSE-WIN-NEXT:    mulsd (%rsi,%rdx), %xmm0494; SSE-WIN-NEXT:    mulsd (%rsi,%r8), %xmm0495; SSE-WIN-NEXT:    mulsd (%rsi,%r9), %xmm0496; SSE-WIN-NEXT:    movsd %xmm0, (%rsi,%r10)497; SSE-WIN-NEXT:    #APP498; SSE-WIN-NEXT:    #NO_APP499; SSE-WIN-NEXT:    addq $8, %rsi500; SSE-WIN-NEXT:    addq $4, %r11501; SSE-WIN-NEXT:    cmpq $8192, %rsi # imm = 0x2000502; SSE-WIN-NEXT:    jne .LBB8_2503; SSE-WIN-NEXT:  # %bb.3: # %for.inc14504; SSE-WIN-NEXT:    # in Loop: Header=BB8_1 Depth=1505; SSE-WIN-NEXT:    incl %eax506; SSE-WIN-NEXT:    cmpl $100000, %eax # imm = 0x186A0507; SSE-WIN-NEXT:    jne .LBB8_1508; SSE-WIN-NEXT:  # %bb.4: # %for.end16509; SSE-WIN-NEXT:    movaps (%rsp), %xmm6 # 16-byte Reload510; SSE-WIN-NEXT:    movaps {{[-0-9]+}}(%r{{[sb]}}p), %xmm7 # 16-byte Reload511; SSE-WIN-NEXT:    movaps {{[-0-9]+}}(%r{{[sb]}}p), %xmm8 # 16-byte Reload512; SSE-WIN-NEXT:    movaps {{[-0-9]+}}(%r{{[sb]}}p), %xmm9 # 16-byte Reload513; SSE-WIN-NEXT:    movaps {{[-0-9]+}}(%r{{[sb]}}p), %xmm10 # 16-byte Reload514; SSE-WIN-NEXT:    movaps {{[-0-9]+}}(%r{{[sb]}}p), %xmm11 # 16-byte Reload515; SSE-WIN-NEXT:    movaps {{[-0-9]+}}(%r{{[sb]}}p), %xmm12 # 16-byte Reload516; SSE-WIN-NEXT:    movaps {{[-0-9]+}}(%r{{[sb]}}p), %xmm13 # 16-byte Reload517; SSE-WIN-NEXT:    movaps {{[-0-9]+}}(%r{{[sb]}}p), %xmm14 # 16-byte Reload518; SSE-WIN-NEXT:    movaps {{[-0-9]+}}(%r{{[sb]}}p), %xmm15 # 16-byte Reload519; SSE-WIN-NEXT:    .seh_startepilogue520; SSE-WIN-NEXT:    addq $160, %rsp521; SSE-WIN-NEXT:    popq %rsi522; SSE-WIN-NEXT:    .seh_endepilogue523; SSE-WIN-NEXT:    retq524; SSE-WIN-NEXT:    .seh_endproc525;526; AVX-LABEL: loopdep3:527; AVX:       # %bb.0: # %entry528; AVX-NEXT:    pushq %rsi529; AVX-NEXT:    .seh_pushreg %rsi530; AVX-NEXT:    subq $160, %rsp531; AVX-NEXT:    .seh_stackalloc 160532; AVX-NEXT:    vmovaps %xmm15, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill533; AVX-NEXT:    .seh_savexmm %xmm15, 144534; AVX-NEXT:    vmovaps %xmm14, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill535; AVX-NEXT:    .seh_savexmm %xmm14, 128536; AVX-NEXT:    vmovaps %xmm13, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill537; AVX-NEXT:    .seh_savexmm %xmm13, 112538; AVX-NEXT:    vmovaps %xmm12, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill539; AVX-NEXT:    .seh_savexmm %xmm12, 96540; AVX-NEXT:    vmovaps %xmm11, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill541; AVX-NEXT:    .seh_savexmm %xmm11, 80542; AVX-NEXT:    vmovaps %xmm10, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill543; AVX-NEXT:    .seh_savexmm %xmm10, 64544; AVX-NEXT:    vmovaps %xmm9, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill545; AVX-NEXT:    .seh_savexmm %xmm9, 48546; AVX-NEXT:    vmovaps %xmm8, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill547; AVX-NEXT:    .seh_savexmm %xmm8, 32548; AVX-NEXT:    vmovaps %xmm7, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill549; AVX-NEXT:    .seh_savexmm %xmm7, 16550; AVX-NEXT:    vmovaps %xmm6, (%rsp) # 16-byte Spill551; AVX-NEXT:    .seh_savexmm %xmm6, 0552; AVX-NEXT:    .seh_endprologue553; AVX-NEXT:    xorl %eax, %eax554; AVX-NEXT:    leaq v(%rip), %rcx555; AVX-NEXT:    leaq x(%rip), %rdx556; AVX-NEXT:    leaq y(%rip), %r8557; AVX-NEXT:    leaq z(%rip), %r9558; AVX-NEXT:    leaq w(%rip), %r10559; AVX-NEXT:    .p2align 4560; AVX-NEXT:  .LBB8_1: # %for.cond1.preheader561; AVX-NEXT:    # =>This Loop Header: Depth=1562; AVX-NEXT:    # Child Loop BB8_2 Depth 2563; AVX-NEXT:    movq %rcx, %r11564; AVX-NEXT:    xorl %esi, %esi565; AVX-NEXT:    .p2align 4566; AVX-NEXT:  .LBB8_2: # %for.body3567; AVX-NEXT:    # Parent Loop BB8_1 Depth=1568; AVX-NEXT:    # => This Inner Loop Header: Depth=2569; AVX-NEXT:    vxorps %xmm5, %xmm5, %xmm5570; AVX-NEXT:    vcvtsi2sdl (%r11), %xmm5, %xmm0571; AVX-NEXT:    vmulsd (%rsi,%rdx), %xmm0, %xmm0572; AVX-NEXT:    vmulsd (%rsi,%r8), %xmm0, %xmm0573; AVX-NEXT:    vmulsd (%rsi,%r9), %xmm0, %xmm0574; AVX-NEXT:    vmovsd %xmm0, (%rsi,%r10)575; AVX-NEXT:    #APP576; AVX-NEXT:    #NO_APP577; AVX-NEXT:    addq $8, %rsi578; AVX-NEXT:    addq $4, %r11579; AVX-NEXT:    cmpq $8192, %rsi # imm = 0x2000580; AVX-NEXT:    jne .LBB8_2581; AVX-NEXT:  # %bb.3: # %for.inc14582; AVX-NEXT:    # in Loop: Header=BB8_1 Depth=1583; AVX-NEXT:    incl %eax584; AVX-NEXT:    cmpl $100000, %eax # imm = 0x186A0585; AVX-NEXT:    jne .LBB8_1586; AVX-NEXT:  # %bb.4: # %for.end16587; AVX-NEXT:    vmovaps (%rsp), %xmm6 # 16-byte Reload588; AVX-NEXT:    vmovaps {{[-0-9]+}}(%r{{[sb]}}p), %xmm7 # 16-byte Reload589; AVX-NEXT:    vmovaps {{[-0-9]+}}(%r{{[sb]}}p), %xmm8 # 16-byte Reload590; AVX-NEXT:    vmovaps {{[-0-9]+}}(%r{{[sb]}}p), %xmm9 # 16-byte Reload591; AVX-NEXT:    vmovaps {{[-0-9]+}}(%r{{[sb]}}p), %xmm10 # 16-byte Reload592; AVX-NEXT:    vmovaps {{[-0-9]+}}(%r{{[sb]}}p), %xmm11 # 16-byte Reload593; AVX-NEXT:    vmovaps {{[-0-9]+}}(%r{{[sb]}}p), %xmm12 # 16-byte Reload594; AVX-NEXT:    vmovaps {{[-0-9]+}}(%r{{[sb]}}p), %xmm13 # 16-byte Reload595; AVX-NEXT:    vmovaps {{[-0-9]+}}(%r{{[sb]}}p), %xmm14 # 16-byte Reload596; AVX-NEXT:    vmovaps {{[-0-9]+}}(%r{{[sb]}}p), %xmm15 # 16-byte Reload597; AVX-NEXT:    .seh_startepilogue598; AVX-NEXT:    addq $160, %rsp599; AVX-NEXT:    popq %rsi600; AVX-NEXT:    .seh_endepilogue601; AVX-NEXT:    retq602; AVX-NEXT:    .seh_endproc603entry:604  br label %for.cond1.preheader605 606for.cond1.preheader:                              ; preds = %for.inc14, %entry607  %i.025 = phi i32 [ 0, %entry ], [ %inc15, %for.inc14 ]608  br label %for.body3609 610for.body3:611  %indvars.iv = phi i64 [ 0, %for.cond1.preheader ], [ %indvars.iv.next, %for.body3 ]612  %arrayidx = getelementptr inbounds [1024 x i32], ptr @v, i64 0, i64 %indvars.iv613  %0 = load i32, ptr %arrayidx, align 4614  %conv = sitofp i32 %0 to double615  %arrayidx5 = getelementptr inbounds [1024 x double], ptr @x, i64 0, i64 %indvars.iv616  %1 = load double, ptr %arrayidx5, align 8617  %mul = fmul double %conv, %1618  %arrayidx7 = getelementptr inbounds [1024 x double], ptr @y, i64 0, i64 %indvars.iv619  %2 = load double, ptr %arrayidx7, align 8620  %mul8 = fmul double %mul, %2621  %arrayidx10 = getelementptr inbounds [1024 x double], ptr @z, i64 0, i64 %indvars.iv622  %3 = load double, ptr %arrayidx10, align 8623  %mul11 = fmul double %mul8, %3624  %arrayidx13 = getelementptr inbounds [1024 x double], ptr @w, i64 0, i64 %indvars.iv625  store double %mul11, ptr %arrayidx13, align 8626  %indvars.iv.next = add nuw nsw i64 %indvars.iv, 1627  %exitcond = icmp eq i64 %indvars.iv.next, 1024628  tail call void asm sideeffect "", "~{xmm0},~{xmm1},~{xmm2},~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{xmm16},~{xmm17},~{xmm18},~{xmm19},~{xmm20},~{xmm21},~{xmm22},~{xmm23},~{xmm24},~{xmm25},~{xmm26},~{xmm27},~{xmm28},~{xmm29},~{xmm30},~{xmm31},~{dirflag},~{fpsr},~{flags}"()629  br i1 %exitcond, label %for.inc14, label %for.body3630 631for.inc14:                                        ; preds = %for.body3632  %inc15 = add nsw i32 %i.025, 1633  %exitcond26 = icmp eq i32 %inc15, 100000634  br i1 %exitcond26, label %for.end16, label %for.cond1.preheader635 636for.end16:                                        ; preds = %for.inc14637  ret void638 639}640 641define dso_local double @inlineasmdep(i64 %arg) {642; SSE-LINUX-LABEL: inlineasmdep:643; SSE-LINUX:       # %bb.0: # %top644; SSE-LINUX-NEXT:    #APP645; SSE-LINUX-NEXT:    #NO_APP646; SSE-LINUX-NEXT:    #APP647; SSE-LINUX-NEXT:    #NO_APP648; SSE-LINUX-NEXT:    #APP649; SSE-LINUX-NEXT:    #NO_APP650; SSE-LINUX-NEXT:    #APP651; SSE-LINUX-NEXT:    #NO_APP652; SSE-LINUX-NEXT:    #APP653; SSE-LINUX-NEXT:    #NO_APP654; SSE-LINUX-NEXT:    #APP655; SSE-LINUX-NEXT:    #NO_APP656; SSE-LINUX-NEXT:    #APP657; SSE-LINUX-NEXT:    #NO_APP658; SSE-LINUX-NEXT:    #APP659; SSE-LINUX-NEXT:    #NO_APP660; SSE-LINUX-NEXT:    xorps %xmm0, %xmm0661; SSE-LINUX-NEXT:    cvtsi2sd %rdi, %xmm0662; SSE-LINUX-NEXT:    retq663;664; SSE-WIN-LABEL: inlineasmdep:665; SSE-WIN:       # %bb.0: # %top666; SSE-WIN-NEXT:    subq $168, %rsp667; SSE-WIN-NEXT:    .seh_stackalloc 168668; SSE-WIN-NEXT:    movaps %xmm15, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill669; SSE-WIN-NEXT:    .seh_savexmm %xmm15, 144670; SSE-WIN-NEXT:    movaps %xmm14, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill671; SSE-WIN-NEXT:    .seh_savexmm %xmm14, 128672; SSE-WIN-NEXT:    movaps %xmm13, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill673; SSE-WIN-NEXT:    .seh_savexmm %xmm13, 112674; SSE-WIN-NEXT:    movaps %xmm12, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill675; SSE-WIN-NEXT:    .seh_savexmm %xmm12, 96676; SSE-WIN-NEXT:    movaps %xmm11, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill677; SSE-WIN-NEXT:    .seh_savexmm %xmm11, 80678; SSE-WIN-NEXT:    movaps %xmm10, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill679; SSE-WIN-NEXT:    .seh_savexmm %xmm10, 64680; SSE-WIN-NEXT:    movaps %xmm9, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill681; SSE-WIN-NEXT:    .seh_savexmm %xmm9, 48682; SSE-WIN-NEXT:    movaps %xmm8, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill683; SSE-WIN-NEXT:    .seh_savexmm %xmm8, 32684; SSE-WIN-NEXT:    movaps %xmm7, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill685; SSE-WIN-NEXT:    .seh_savexmm %xmm7, 16686; SSE-WIN-NEXT:    movaps %xmm6, (%rsp) # 16-byte Spill687; SSE-WIN-NEXT:    .seh_savexmm %xmm6, 0688; SSE-WIN-NEXT:    .seh_endprologue689; SSE-WIN-NEXT:    #APP690; SSE-WIN-NEXT:    #NO_APP691; SSE-WIN-NEXT:    #APP692; SSE-WIN-NEXT:    #NO_APP693; SSE-WIN-NEXT:    #APP694; SSE-WIN-NEXT:    #NO_APP695; SSE-WIN-NEXT:    #APP696; SSE-WIN-NEXT:    #NO_APP697; SSE-WIN-NEXT:    #APP698; SSE-WIN-NEXT:    #NO_APP699; SSE-WIN-NEXT:    #APP700; SSE-WIN-NEXT:    #NO_APP701; SSE-WIN-NEXT:    #APP702; SSE-WIN-NEXT:    #NO_APP703; SSE-WIN-NEXT:    #APP704; SSE-WIN-NEXT:    #NO_APP705; SSE-WIN-NEXT:    xorps %xmm0, %xmm0706; SSE-WIN-NEXT:    cvtsi2sd %rcx, %xmm0707; SSE-WIN-NEXT:    movaps (%rsp), %xmm6 # 16-byte Reload708; SSE-WIN-NEXT:    movaps {{[-0-9]+}}(%r{{[sb]}}p), %xmm7 # 16-byte Reload709; SSE-WIN-NEXT:    movaps {{[-0-9]+}}(%r{{[sb]}}p), %xmm8 # 16-byte Reload710; SSE-WIN-NEXT:    movaps {{[-0-9]+}}(%r{{[sb]}}p), %xmm9 # 16-byte Reload711; SSE-WIN-NEXT:    movaps {{[-0-9]+}}(%r{{[sb]}}p), %xmm10 # 16-byte Reload712; SSE-WIN-NEXT:    movaps {{[-0-9]+}}(%r{{[sb]}}p), %xmm11 # 16-byte Reload713; SSE-WIN-NEXT:    movaps {{[-0-9]+}}(%r{{[sb]}}p), %xmm12 # 16-byte Reload714; SSE-WIN-NEXT:    movaps {{[-0-9]+}}(%r{{[sb]}}p), %xmm13 # 16-byte Reload715; SSE-WIN-NEXT:    movaps {{[-0-9]+}}(%r{{[sb]}}p), %xmm14 # 16-byte Reload716; SSE-WIN-NEXT:    movaps {{[-0-9]+}}(%r{{[sb]}}p), %xmm15 # 16-byte Reload717; SSE-WIN-NEXT:    .seh_startepilogue718; SSE-WIN-NEXT:    addq $168, %rsp719; SSE-WIN-NEXT:    .seh_endepilogue720; SSE-WIN-NEXT:    retq721; SSE-WIN-NEXT:    .seh_endproc722;723; AVX-LABEL: inlineasmdep:724; AVX:       # %bb.0: # %top725; AVX-NEXT:    subq $168, %rsp726; AVX-NEXT:    .seh_stackalloc 168727; AVX-NEXT:    vmovaps %xmm15, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill728; AVX-NEXT:    .seh_savexmm %xmm15, 144729; AVX-NEXT:    vmovaps %xmm14, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill730; AVX-NEXT:    .seh_savexmm %xmm14, 128731; AVX-NEXT:    vmovaps %xmm13, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill732; AVX-NEXT:    .seh_savexmm %xmm13, 112733; AVX-NEXT:    vmovaps %xmm12, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill734; AVX-NEXT:    .seh_savexmm %xmm12, 96735; AVX-NEXT:    vmovaps %xmm11, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill736; AVX-NEXT:    .seh_savexmm %xmm11, 80737; AVX-NEXT:    vmovaps %xmm10, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill738; AVX-NEXT:    .seh_savexmm %xmm10, 64739; AVX-NEXT:    vmovaps %xmm9, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill740; AVX-NEXT:    .seh_savexmm %xmm9, 48741; AVX-NEXT:    vmovaps %xmm8, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill742; AVX-NEXT:    .seh_savexmm %xmm8, 32743; AVX-NEXT:    vmovaps %xmm7, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill744; AVX-NEXT:    .seh_savexmm %xmm7, 16745; AVX-NEXT:    vmovaps %xmm6, (%rsp) # 16-byte Spill746; AVX-NEXT:    .seh_savexmm %xmm6, 0747; AVX-NEXT:    .seh_endprologue748; AVX-NEXT:    #APP749; AVX-NEXT:    #NO_APP750; AVX-NEXT:    #APP751; AVX-NEXT:    #NO_APP752; AVX-NEXT:    #APP753; AVX-NEXT:    #NO_APP754; AVX-NEXT:    #APP755; AVX-NEXT:    #NO_APP756; AVX-NEXT:    #APP757; AVX-NEXT:    #NO_APP758; AVX-NEXT:    #APP759; AVX-NEXT:    #NO_APP760; AVX-NEXT:    #APP761; AVX-NEXT:    #NO_APP762; AVX-NEXT:    #APP763; AVX-NEXT:    #NO_APP764; AVX-NEXT:    vxorps %xmm3, %xmm3, %xmm3765; AVX-NEXT:    vcvtsi2sd %rcx, %xmm3, %xmm0766; AVX-NEXT:    vmovaps (%rsp), %xmm6 # 16-byte Reload767; AVX-NEXT:    vmovaps {{[-0-9]+}}(%r{{[sb]}}p), %xmm7 # 16-byte Reload768; AVX-NEXT:    vmovaps {{[-0-9]+}}(%r{{[sb]}}p), %xmm8 # 16-byte Reload769; AVX-NEXT:    vmovaps {{[-0-9]+}}(%r{{[sb]}}p), %xmm9 # 16-byte Reload770; AVX-NEXT:    vmovaps {{[-0-9]+}}(%r{{[sb]}}p), %xmm10 # 16-byte Reload771; AVX-NEXT:    vmovaps {{[-0-9]+}}(%r{{[sb]}}p), %xmm11 # 16-byte Reload772; AVX-NEXT:    vmovaps {{[-0-9]+}}(%r{{[sb]}}p), %xmm12 # 16-byte Reload773; AVX-NEXT:    vmovaps {{[-0-9]+}}(%r{{[sb]}}p), %xmm13 # 16-byte Reload774; AVX-NEXT:    vmovaps {{[-0-9]+}}(%r{{[sb]}}p), %xmm14 # 16-byte Reload775; AVX-NEXT:    vmovaps {{[-0-9]+}}(%r{{[sb]}}p), %xmm15 # 16-byte Reload776; AVX-NEXT:    .seh_startepilogue777; AVX-NEXT:    addq $168, %rsp778; AVX-NEXT:    .seh_endepilogue779; AVX-NEXT:    retq780; AVX-NEXT:    .seh_endproc781top:782  tail call void asm sideeffect "", "~{xmm0},~{xmm1},~{xmm2},~{xmm3},~{dirflag},~{fpsr},~{flags}"()783  tail call void asm sideeffect "", "~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{dirflag},~{fpsr},~{flags}"()784  tail call void asm sideeffect "", "~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{dirflag},~{fpsr},~{flags}"()785  tail call void asm sideeffect "", "~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{dirflag},~{fpsr},~{flags}"()786  tail call void asm sideeffect "", "~{xmm16},~{xmm17},~{xmm18},~{xmm19},~{dirflag},~{fpsr},~{flags}"()787  tail call void asm sideeffect "", "~{xmm20},~{xmm21},~{xmm22},~{xmm23},~{dirflag},~{fpsr},~{flags}"()788  tail call void asm sideeffect "", "~{xmm24},~{xmm25},~{xmm26},~{xmm27},~{dirflag},~{fpsr},~{flags}"()789  tail call void asm sideeffect "", "~{xmm28},~{xmm29},~{xmm30},~{xmm31},~{dirflag},~{fpsr},~{flags}"()790  %tmp1 = sitofp i64 %arg to double791  ret double %tmp1792}793 794; Make sure we are making a smart choice regarding undef registers and795; hiding the false dependency behind a true dependency796define dso_local double @truedeps(float %arg) {797; SSE-LINUX-LABEL: truedeps:798; SSE-LINUX:       # %bb.0: # %top799; SSE-LINUX-NEXT:    movss %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 4-byte Spill800; SSE-LINUX-NEXT:    #APP801; SSE-LINUX-NEXT:    #NO_APP802; SSE-LINUX-NEXT:    #APP803; SSE-LINUX-NEXT:    #NO_APP804; SSE-LINUX-NEXT:    #APP805; SSE-LINUX-NEXT:    #NO_APP806; SSE-LINUX-NEXT:    #APP807; SSE-LINUX-NEXT:    #NO_APP808; SSE-LINUX-NEXT:    #APP809; SSE-LINUX-NEXT:    #NO_APP810; SSE-LINUX-NEXT:    #APP811; SSE-LINUX-NEXT:    #NO_APP812; SSE-LINUX-NEXT:    #APP813; SSE-LINUX-NEXT:    #NO_APP814; SSE-LINUX-NEXT:    #APP815; SSE-LINUX-NEXT:    #NO_APP816; SSE-LINUX-NEXT:    #APP817; SSE-LINUX-NEXT:    #NO_APP818; SSE-LINUX-NEXT:    movss {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 4-byte Reload819; SSE-LINUX-NEXT:    # xmm0 = mem[0],zero,zero,zero820; SSE-LINUX-NEXT:    cvtss2sd %xmm0, %xmm0821; SSE-LINUX-NEXT:    retq822;823; SSE-WIN-LABEL: truedeps:824; SSE-WIN:       # %bb.0: # %top825; SSE-WIN-NEXT:    subq $184, %rsp826; SSE-WIN-NEXT:    .seh_stackalloc 184827; SSE-WIN-NEXT:    movaps %xmm15, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill828; SSE-WIN-NEXT:    .seh_savexmm %xmm15, 160829; SSE-WIN-NEXT:    movaps %xmm14, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill830; SSE-WIN-NEXT:    .seh_savexmm %xmm14, 144831; SSE-WIN-NEXT:    movaps %xmm13, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill832; SSE-WIN-NEXT:    .seh_savexmm %xmm13, 128833; SSE-WIN-NEXT:    movaps %xmm12, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill834; SSE-WIN-NEXT:    .seh_savexmm %xmm12, 112835; SSE-WIN-NEXT:    movaps %xmm11, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill836; SSE-WIN-NEXT:    .seh_savexmm %xmm11, 96837; SSE-WIN-NEXT:    movaps %xmm10, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill838; SSE-WIN-NEXT:    .seh_savexmm %xmm10, 80839; SSE-WIN-NEXT:    movaps %xmm9, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill840; SSE-WIN-NEXT:    .seh_savexmm %xmm9, 64841; SSE-WIN-NEXT:    movaps %xmm8, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill842; SSE-WIN-NEXT:    .seh_savexmm %xmm8, 48843; SSE-WIN-NEXT:    movaps %xmm7, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill844; SSE-WIN-NEXT:    .seh_savexmm %xmm7, 32845; SSE-WIN-NEXT:    movaps %xmm6, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill846; SSE-WIN-NEXT:    .seh_savexmm %xmm6, 16847; SSE-WIN-NEXT:    .seh_endprologue848; SSE-WIN-NEXT:    movss %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 4-byte Spill849; SSE-WIN-NEXT:    #APP850; SSE-WIN-NEXT:    #NO_APP851; SSE-WIN-NEXT:    #APP852; SSE-WIN-NEXT:    #NO_APP853; SSE-WIN-NEXT:    #APP854; SSE-WIN-NEXT:    #NO_APP855; SSE-WIN-NEXT:    #APP856; SSE-WIN-NEXT:    #NO_APP857; SSE-WIN-NEXT:    #APP858; SSE-WIN-NEXT:    #NO_APP859; SSE-WIN-NEXT:    #APP860; SSE-WIN-NEXT:    #NO_APP861; SSE-WIN-NEXT:    #APP862; SSE-WIN-NEXT:    #NO_APP863; SSE-WIN-NEXT:    #APP864; SSE-WIN-NEXT:    #NO_APP865; SSE-WIN-NEXT:    #APP866; SSE-WIN-NEXT:    #NO_APP867; SSE-WIN-NEXT:    movss {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 4-byte Reload868; SSE-WIN-NEXT:    # xmm0 = mem[0],zero,zero,zero869; SSE-WIN-NEXT:    cvtss2sd %xmm0, %xmm0870; SSE-WIN-NEXT:    movaps {{[-0-9]+}}(%r{{[sb]}}p), %xmm6 # 16-byte Reload871; SSE-WIN-NEXT:    movaps {{[-0-9]+}}(%r{{[sb]}}p), %xmm7 # 16-byte Reload872; SSE-WIN-NEXT:    movaps {{[-0-9]+}}(%r{{[sb]}}p), %xmm8 # 16-byte Reload873; SSE-WIN-NEXT:    movaps {{[-0-9]+}}(%r{{[sb]}}p), %xmm9 # 16-byte Reload874; SSE-WIN-NEXT:    movaps {{[-0-9]+}}(%r{{[sb]}}p), %xmm10 # 16-byte Reload875; SSE-WIN-NEXT:    movaps {{[-0-9]+}}(%r{{[sb]}}p), %xmm11 # 16-byte Reload876; SSE-WIN-NEXT:    movaps {{[-0-9]+}}(%r{{[sb]}}p), %xmm12 # 16-byte Reload877; SSE-WIN-NEXT:    movaps {{[-0-9]+}}(%r{{[sb]}}p), %xmm13 # 16-byte Reload878; SSE-WIN-NEXT:    movaps {{[-0-9]+}}(%r{{[sb]}}p), %xmm14 # 16-byte Reload879; SSE-WIN-NEXT:    movaps {{[-0-9]+}}(%r{{[sb]}}p), %xmm15 # 16-byte Reload880; SSE-WIN-NEXT:    .seh_startepilogue881; SSE-WIN-NEXT:    addq $184, %rsp882; SSE-WIN-NEXT:    .seh_endepilogue883; SSE-WIN-NEXT:    retq884; SSE-WIN-NEXT:    .seh_endproc885;886; AVX-LABEL: truedeps:887; AVX:       # %bb.0: # %top888; AVX-NEXT:    subq $184, %rsp889; AVX-NEXT:    .seh_stackalloc 184890; AVX-NEXT:    vmovaps %xmm15, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill891; AVX-NEXT:    .seh_savexmm %xmm15, 160892; AVX-NEXT:    vmovaps %xmm14, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill893; AVX-NEXT:    .seh_savexmm %xmm14, 144894; AVX-NEXT:    vmovaps %xmm13, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill895; AVX-NEXT:    .seh_savexmm %xmm13, 128896; AVX-NEXT:    vmovaps %xmm12, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill897; AVX-NEXT:    .seh_savexmm %xmm12, 112898; AVX-NEXT:    vmovaps %xmm11, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill899; AVX-NEXT:    .seh_savexmm %xmm11, 96900; AVX-NEXT:    vmovaps %xmm10, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill901; AVX-NEXT:    .seh_savexmm %xmm10, 80902; AVX-NEXT:    vmovaps %xmm9, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill903; AVX-NEXT:    .seh_savexmm %xmm9, 64904; AVX-NEXT:    vmovaps %xmm8, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill905; AVX-NEXT:    .seh_savexmm %xmm8, 48906; AVX-NEXT:    vmovaps %xmm7, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill907; AVX-NEXT:    .seh_savexmm %xmm7, 32908; AVX-NEXT:    vmovaps %xmm6, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill909; AVX-NEXT:    .seh_savexmm %xmm6, 16910; AVX-NEXT:    .seh_endprologue911; AVX-NEXT:    vmovss %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 4-byte Spill912; AVX-NEXT:    #APP913; AVX-NEXT:    #NO_APP914; AVX-NEXT:    #APP915; AVX-NEXT:    #NO_APP916; AVX-NEXT:    #APP917; AVX-NEXT:    #NO_APP918; AVX-NEXT:    #APP919; AVX-NEXT:    #NO_APP920; AVX-NEXT:    #APP921; AVX-NEXT:    #NO_APP922; AVX-NEXT:    #APP923; AVX-NEXT:    #NO_APP924; AVX-NEXT:    #APP925; AVX-NEXT:    #NO_APP926; AVX-NEXT:    #APP927; AVX-NEXT:    #NO_APP928; AVX-NEXT:    #APP929; AVX-NEXT:    #NO_APP930; AVX-NEXT:    vmovss {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 4-byte Reload931; AVX-NEXT:    # xmm0 = mem[0],zero,zero,zero932; AVX-NEXT:    vcvtss2sd %xmm0, %xmm0, %xmm0933; AVX-NEXT:    vmovaps {{[-0-9]+}}(%r{{[sb]}}p), %xmm6 # 16-byte Reload934; AVX-NEXT:    vmovaps {{[-0-9]+}}(%r{{[sb]}}p), %xmm7 # 16-byte Reload935; AVX-NEXT:    vmovaps {{[-0-9]+}}(%r{{[sb]}}p), %xmm8 # 16-byte Reload936; AVX-NEXT:    vmovaps {{[-0-9]+}}(%r{{[sb]}}p), %xmm9 # 16-byte Reload937; AVX-NEXT:    vmovaps {{[-0-9]+}}(%r{{[sb]}}p), %xmm10 # 16-byte Reload938; AVX-NEXT:    vmovaps {{[-0-9]+}}(%r{{[sb]}}p), %xmm11 # 16-byte Reload939; AVX-NEXT:    vmovaps {{[-0-9]+}}(%r{{[sb]}}p), %xmm12 # 16-byte Reload940; AVX-NEXT:    vmovaps {{[-0-9]+}}(%r{{[sb]}}p), %xmm13 # 16-byte Reload941; AVX-NEXT:    vmovaps {{[-0-9]+}}(%r{{[sb]}}p), %xmm14 # 16-byte Reload942; AVX-NEXT:    vmovaps {{[-0-9]+}}(%r{{[sb]}}p), %xmm15 # 16-byte Reload943; AVX-NEXT:    .seh_startepilogue944; AVX-NEXT:    addq $184, %rsp945; AVX-NEXT:    .seh_endepilogue946; AVX-NEXT:    retq947; AVX-NEXT:    .seh_endproc948top:949  tail call void asm sideeffect "", "~{xmm6},~{dirflag},~{fpsr},~{flags}"()950  tail call void asm sideeffect "", "~{xmm0},~{xmm1},~{xmm2},~{xmm3},~{dirflag},~{fpsr},~{flags}"()951  tail call void asm sideeffect "", "~{xmm4},~{xmm5},~{xmm7},~{dirflag},~{fpsr},~{flags}"()952  tail call void asm sideeffect "", "~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{dirflag},~{fpsr},~{flags}"()953  tail call void asm sideeffect "", "~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{dirflag},~{fpsr},~{flags}"()954  tail call void asm sideeffect "", "~{xmm16},~{xmm17},~{xmm18},~{xmm19},~{dirflag},~{fpsr},~{flags}"()955  tail call void asm sideeffect "", "~{xmm20},~{xmm21},~{xmm22},~{xmm23},~{dirflag},~{fpsr},~{flags}"()956  tail call void asm sideeffect "", "~{xmm24},~{xmm25},~{xmm26},~{xmm27},~{dirflag},~{fpsr},~{flags}"()957  tail call void asm sideeffect "", "~{xmm28},~{xmm29},~{xmm30},~{xmm31},~{dirflag},~{fpsr},~{flags}"()958  %tmp1 = fpext float %arg to double959  ret double %tmp1960}961 962; Make sure we are making a smart choice regarding undef registers and963; choosing the register with the highest clearence964define dso_local double @clearence(i64 %arg) {965; SSE-LINUX-LABEL: clearence:966; SSE-LINUX:       # %bb.0: # %top967; SSE-LINUX-NEXT:    #APP968; SSE-LINUX-NEXT:    #NO_APP969; SSE-LINUX-NEXT:    #APP970; SSE-LINUX-NEXT:    #NO_APP971; SSE-LINUX-NEXT:    #APP972; SSE-LINUX-NEXT:    #NO_APP973; SSE-LINUX-NEXT:    #APP974; SSE-LINUX-NEXT:    #NO_APP975; SSE-LINUX-NEXT:    #APP976; SSE-LINUX-NEXT:    #NO_APP977; SSE-LINUX-NEXT:    #APP978; SSE-LINUX-NEXT:    #NO_APP979; SSE-LINUX-NEXT:    #APP980; SSE-LINUX-NEXT:    #NO_APP981; SSE-LINUX-NEXT:    #APP982; SSE-LINUX-NEXT:    #NO_APP983; SSE-LINUX-NEXT:    #APP984; SSE-LINUX-NEXT:    #NO_APP985; SSE-LINUX-NEXT:    xorps %xmm0, %xmm0986; SSE-LINUX-NEXT:    cvtsi2sd %rdi, %xmm0987; SSE-LINUX-NEXT:    retq988;989; SSE-WIN-LABEL: clearence:990; SSE-WIN:       # %bb.0: # %top991; SSE-WIN-NEXT:    subq $168, %rsp992; SSE-WIN-NEXT:    .seh_stackalloc 168993; SSE-WIN-NEXT:    movaps %xmm15, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill994; SSE-WIN-NEXT:    .seh_savexmm %xmm15, 144995; SSE-WIN-NEXT:    movaps %xmm14, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill996; SSE-WIN-NEXT:    .seh_savexmm %xmm14, 128997; SSE-WIN-NEXT:    movaps %xmm13, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill998; SSE-WIN-NEXT:    .seh_savexmm %xmm13, 112999; SSE-WIN-NEXT:    movaps %xmm12, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill1000; SSE-WIN-NEXT:    .seh_savexmm %xmm12, 961001; SSE-WIN-NEXT:    movaps %xmm11, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill1002; SSE-WIN-NEXT:    .seh_savexmm %xmm11, 801003; SSE-WIN-NEXT:    movaps %xmm10, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill1004; SSE-WIN-NEXT:    .seh_savexmm %xmm10, 641005; SSE-WIN-NEXT:    movaps %xmm9, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill1006; SSE-WIN-NEXT:    .seh_savexmm %xmm9, 481007; SSE-WIN-NEXT:    movaps %xmm8, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill1008; SSE-WIN-NEXT:    .seh_savexmm %xmm8, 321009; SSE-WIN-NEXT:    movaps %xmm7, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill1010; SSE-WIN-NEXT:    .seh_savexmm %xmm7, 161011; SSE-WIN-NEXT:    movaps %xmm6, (%rsp) # 16-byte Spill1012; SSE-WIN-NEXT:    .seh_savexmm %xmm6, 01013; SSE-WIN-NEXT:    .seh_endprologue1014; SSE-WIN-NEXT:    #APP1015; SSE-WIN-NEXT:    #NO_APP1016; SSE-WIN-NEXT:    #APP1017; SSE-WIN-NEXT:    #NO_APP1018; SSE-WIN-NEXT:    #APP1019; SSE-WIN-NEXT:    #NO_APP1020; SSE-WIN-NEXT:    #APP1021; SSE-WIN-NEXT:    #NO_APP1022; SSE-WIN-NEXT:    #APP1023; SSE-WIN-NEXT:    #NO_APP1024; SSE-WIN-NEXT:    #APP1025; SSE-WIN-NEXT:    #NO_APP1026; SSE-WIN-NEXT:    #APP1027; SSE-WIN-NEXT:    #NO_APP1028; SSE-WIN-NEXT:    #APP1029; SSE-WIN-NEXT:    #NO_APP1030; SSE-WIN-NEXT:    #APP1031; SSE-WIN-NEXT:    #NO_APP1032; SSE-WIN-NEXT:    xorps %xmm0, %xmm01033; SSE-WIN-NEXT:    cvtsi2sd %rcx, %xmm01034; SSE-WIN-NEXT:    movaps (%rsp), %xmm6 # 16-byte Reload1035; SSE-WIN-NEXT:    movaps {{[-0-9]+}}(%r{{[sb]}}p), %xmm7 # 16-byte Reload1036; SSE-WIN-NEXT:    movaps {{[-0-9]+}}(%r{{[sb]}}p), %xmm8 # 16-byte Reload1037; SSE-WIN-NEXT:    movaps {{[-0-9]+}}(%r{{[sb]}}p), %xmm9 # 16-byte Reload1038; SSE-WIN-NEXT:    movaps {{[-0-9]+}}(%r{{[sb]}}p), %xmm10 # 16-byte Reload1039; SSE-WIN-NEXT:    movaps {{[-0-9]+}}(%r{{[sb]}}p), %xmm11 # 16-byte Reload1040; SSE-WIN-NEXT:    movaps {{[-0-9]+}}(%r{{[sb]}}p), %xmm12 # 16-byte Reload1041; SSE-WIN-NEXT:    movaps {{[-0-9]+}}(%r{{[sb]}}p), %xmm13 # 16-byte Reload1042; SSE-WIN-NEXT:    movaps {{[-0-9]+}}(%r{{[sb]}}p), %xmm14 # 16-byte Reload1043; SSE-WIN-NEXT:    movaps {{[-0-9]+}}(%r{{[sb]}}p), %xmm15 # 16-byte Reload1044; SSE-WIN-NEXT:    .seh_startepilogue1045; SSE-WIN-NEXT:    addq $168, %rsp1046; SSE-WIN-NEXT:    .seh_endepilogue1047; SSE-WIN-NEXT:    retq1048; SSE-WIN-NEXT:    .seh_endproc1049;1050; AVX-LABEL: clearence:1051; AVX:       # %bb.0: # %top1052; AVX-NEXT:    subq $168, %rsp1053; AVX-NEXT:    .seh_stackalloc 1681054; AVX-NEXT:    vmovaps %xmm15, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill1055; AVX-NEXT:    .seh_savexmm %xmm15, 1441056; AVX-NEXT:    vmovaps %xmm14, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill1057; AVX-NEXT:    .seh_savexmm %xmm14, 1281058; AVX-NEXT:    vmovaps %xmm13, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill1059; AVX-NEXT:    .seh_savexmm %xmm13, 1121060; AVX-NEXT:    vmovaps %xmm12, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill1061; AVX-NEXT:    .seh_savexmm %xmm12, 961062; AVX-NEXT:    vmovaps %xmm11, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill1063; AVX-NEXT:    .seh_savexmm %xmm11, 801064; AVX-NEXT:    vmovaps %xmm10, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill1065; AVX-NEXT:    .seh_savexmm %xmm10, 641066; AVX-NEXT:    vmovaps %xmm9, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill1067; AVX-NEXT:    .seh_savexmm %xmm9, 481068; AVX-NEXT:    vmovaps %xmm8, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill1069; AVX-NEXT:    .seh_savexmm %xmm8, 321070; AVX-NEXT:    vmovaps %xmm7, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill1071; AVX-NEXT:    .seh_savexmm %xmm7, 161072; AVX-NEXT:    vmovaps %xmm6, (%rsp) # 16-byte Spill1073; AVX-NEXT:    .seh_savexmm %xmm6, 01074; AVX-NEXT:    .seh_endprologue1075; AVX-NEXT:    #APP1076; AVX-NEXT:    #NO_APP1077; AVX-NEXT:    #APP1078; AVX-NEXT:    #NO_APP1079; AVX-NEXT:    #APP1080; AVX-NEXT:    #NO_APP1081; AVX-NEXT:    #APP1082; AVX-NEXT:    #NO_APP1083; AVX-NEXT:    #APP1084; AVX-NEXT:    #NO_APP1085; AVX-NEXT:    #APP1086; AVX-NEXT:    #NO_APP1087; AVX-NEXT:    #APP1088; AVX-NEXT:    #NO_APP1089; AVX-NEXT:    #APP1090; AVX-NEXT:    #NO_APP1091; AVX-NEXT:    #APP1092; AVX-NEXT:    #NO_APP1093; AVX-NEXT:    vxorps %xmm6, %xmm6, %xmm61094; AVX-NEXT:    vcvtsi2sd %rcx, %xmm6, %xmm01095; AVX-NEXT:    vmovaps (%rsp), %xmm6 # 16-byte Reload1096; AVX-NEXT:    vmovaps {{[-0-9]+}}(%r{{[sb]}}p), %xmm7 # 16-byte Reload1097; AVX-NEXT:    vmovaps {{[-0-9]+}}(%r{{[sb]}}p), %xmm8 # 16-byte Reload1098; AVX-NEXT:    vmovaps {{[-0-9]+}}(%r{{[sb]}}p), %xmm9 # 16-byte Reload1099; AVX-NEXT:    vmovaps {{[-0-9]+}}(%r{{[sb]}}p), %xmm10 # 16-byte Reload1100; AVX-NEXT:    vmovaps {{[-0-9]+}}(%r{{[sb]}}p), %xmm11 # 16-byte Reload1101; AVX-NEXT:    vmovaps {{[-0-9]+}}(%r{{[sb]}}p), %xmm12 # 16-byte Reload1102; AVX-NEXT:    vmovaps {{[-0-9]+}}(%r{{[sb]}}p), %xmm13 # 16-byte Reload1103; AVX-NEXT:    vmovaps {{[-0-9]+}}(%r{{[sb]}}p), %xmm14 # 16-byte Reload1104; AVX-NEXT:    vmovaps {{[-0-9]+}}(%r{{[sb]}}p), %xmm15 # 16-byte Reload1105; AVX-NEXT:    .seh_startepilogue1106; AVX-NEXT:    addq $168, %rsp1107; AVX-NEXT:    .seh_endepilogue1108; AVX-NEXT:    retq1109; AVX-NEXT:    .seh_endproc1110top:1111  tail call void asm sideeffect "", "~{xmm6},~{dirflag},~{fpsr},~{flags}"()1112  tail call void asm sideeffect "", "~{xmm0},~{xmm1},~{xmm2},~{xmm3},~{dirflag},~{fpsr},~{flags}"()1113  tail call void asm sideeffect "", "~{xmm4},~{xmm5},~{xmm7},~{dirflag},~{fpsr},~{flags}"()1114  tail call void asm sideeffect "", "~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{dirflag},~{fpsr},~{flags}"()1115  tail call void asm sideeffect "", "~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{dirflag},~{fpsr},~{flags}"()1116  tail call void asm sideeffect "", "~{xmm16},~{xmm17},~{xmm18},~{xmm19},~{dirflag},~{fpsr},~{flags}"()1117  tail call void asm sideeffect "", "~{xmm20},~{xmm21},~{xmm22},~{xmm23},~{dirflag},~{fpsr},~{flags}"()1118  tail call void asm sideeffect "", "~{xmm24},~{xmm25},~{xmm26},~{xmm27},~{dirflag},~{fpsr},~{flags}"()1119  tail call void asm sideeffect "", "~{xmm28},~{xmm29},~{xmm30},~{xmm31},~{dirflag},~{fpsr},~{flags}"()1120  %tmp1 = sitofp i64 %arg to double1121  ret double %tmp11122}1123 1124; Make sure we are making a smart choice regarding undef registers in order to1125; avoid a cyclic dependence on a write to the same register in a previous1126; iteration, especially when we cannot zero out the undef register because it1127; is alive.1128define i64 @loopclearence(ptr nocapture %x, ptr nocapture %y) nounwind {1129; SSE-LINUX-LABEL: loopclearence:1130; SSE-LINUX:       # %bb.0: # %entry1131; SSE-LINUX-NEXT:    movq (%rdi), %rax1132; SSE-LINUX-NEXT:    movl $1, %ecx1133; SSE-LINUX-NEXT:    .p2align 41134; SSE-LINUX-NEXT:  .LBB12_1: # %loop1135; SSE-LINUX-NEXT:    # =>This Inner Loop Header: Depth=11136; SSE-LINUX-NEXT:    xorps %xmm4, %xmm41137; SSE-LINUX-NEXT:    cvtsi2sd %rcx, %xmm41138; SSE-LINUX-NEXT:    #APP1139; SSE-LINUX-NEXT:    #NO_APP1140; SSE-LINUX-NEXT:    #APP1141; SSE-LINUX-NEXT:    #NO_APP1142; SSE-LINUX-NEXT:    #APP1143; SSE-LINUX-NEXT:    #NO_APP1144; SSE-LINUX-NEXT:    #APP1145; SSE-LINUX-NEXT:    #NO_APP1146; SSE-LINUX-NEXT:    #APP1147; SSE-LINUX-NEXT:    #NO_APP1148; SSE-LINUX-NEXT:    #APP1149; SSE-LINUX-NEXT:    #NO_APP1150; SSE-LINUX-NEXT:    #APP1151; SSE-LINUX-NEXT:    #NO_APP1152; SSE-LINUX-NEXT:    addsd (%rsi), %xmm41153; SSE-LINUX-NEXT:    cvttsd2si %xmm4, %rdx1154; SSE-LINUX-NEXT:    addq %rdx, %rax1155; SSE-LINUX-NEXT:    incq %rcx1156; SSE-LINUX-NEXT:    cmpq $156250000, %rcx # imm = 0x9502F901157; SSE-LINUX-NEXT:    jne .LBB12_11158; SSE-LINUX-NEXT:  # %bb.2: # %ret1159; SSE-LINUX-NEXT:    retq1160;1161; SSE-WIN-LABEL: loopclearence:1162; SSE-WIN:       # %bb.0: # %entry1163; SSE-WIN-NEXT:    subq $136, %rsp1164; SSE-WIN-NEXT:    movaps %xmm15, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill1165; SSE-WIN-NEXT:    movaps %xmm14, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill1166; SSE-WIN-NEXT:    movaps %xmm13, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill1167; SSE-WIN-NEXT:    movaps %xmm12, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill1168; SSE-WIN-NEXT:    movaps %xmm11, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill1169; SSE-WIN-NEXT:    movaps %xmm10, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill1170; SSE-WIN-NEXT:    movaps %xmm9, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill1171; SSE-WIN-NEXT:    movaps %xmm8, (%rsp) # 16-byte Spill1172; SSE-WIN-NEXT:    movq (%rcx), %rax1173; SSE-WIN-NEXT:    movl $1, %ecx1174; SSE-WIN-NEXT:    .p2align 41175; SSE-WIN-NEXT:  .LBB12_1: # %loop1176; SSE-WIN-NEXT:    # =>This Inner Loop Header: Depth=11177; SSE-WIN-NEXT:    xorps %xmm4, %xmm41178; SSE-WIN-NEXT:    cvtsi2sd %rcx, %xmm41179; SSE-WIN-NEXT:    #APP1180; SSE-WIN-NEXT:    #NO_APP1181; SSE-WIN-NEXT:    #APP1182; SSE-WIN-NEXT:    #NO_APP1183; SSE-WIN-NEXT:    #APP1184; SSE-WIN-NEXT:    #NO_APP1185; SSE-WIN-NEXT:    #APP1186; SSE-WIN-NEXT:    #NO_APP1187; SSE-WIN-NEXT:    #APP1188; SSE-WIN-NEXT:    #NO_APP1189; SSE-WIN-NEXT:    #APP1190; SSE-WIN-NEXT:    #NO_APP1191; SSE-WIN-NEXT:    #APP1192; SSE-WIN-NEXT:    #NO_APP1193; SSE-WIN-NEXT:    addsd (%rdx), %xmm41194; SSE-WIN-NEXT:    cvttsd2si %xmm4, %r81195; SSE-WIN-NEXT:    addq %r8, %rax1196; SSE-WIN-NEXT:    incq %rcx1197; SSE-WIN-NEXT:    cmpq $156250000, %rcx # imm = 0x9502F901198; SSE-WIN-NEXT:    jne .LBB12_11199; SSE-WIN-NEXT:  # %bb.2: # %ret1200; SSE-WIN-NEXT:    movaps (%rsp), %xmm8 # 16-byte Reload1201; SSE-WIN-NEXT:    movaps {{[-0-9]+}}(%r{{[sb]}}p), %xmm9 # 16-byte Reload1202; SSE-WIN-NEXT:    movaps {{[-0-9]+}}(%r{{[sb]}}p), %xmm10 # 16-byte Reload1203; SSE-WIN-NEXT:    movaps {{[-0-9]+}}(%r{{[sb]}}p), %xmm11 # 16-byte Reload1204; SSE-WIN-NEXT:    movaps {{[-0-9]+}}(%r{{[sb]}}p), %xmm12 # 16-byte Reload1205; SSE-WIN-NEXT:    movaps {{[-0-9]+}}(%r{{[sb]}}p), %xmm13 # 16-byte Reload1206; SSE-WIN-NEXT:    movaps {{[-0-9]+}}(%r{{[sb]}}p), %xmm14 # 16-byte Reload1207; SSE-WIN-NEXT:    movaps {{[-0-9]+}}(%r{{[sb]}}p), %xmm15 # 16-byte Reload1208; SSE-WIN-NEXT:    addq $136, %rsp1209; SSE-WIN-NEXT:    retq1210;1211; AVX-LABEL: loopclearence:1212; AVX:       # %bb.0: # %entry1213; AVX-NEXT:    subq $136, %rsp1214; AVX-NEXT:    vmovaps %xmm15, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill1215; AVX-NEXT:    vmovaps %xmm14, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill1216; AVX-NEXT:    vmovaps %xmm13, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill1217; AVX-NEXT:    vmovaps %xmm12, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill1218; AVX-NEXT:    vmovaps %xmm11, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill1219; AVX-NEXT:    vmovaps %xmm10, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill1220; AVX-NEXT:    vmovaps %xmm9, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill1221; AVX-NEXT:    vmovaps %xmm8, (%rsp) # 16-byte Spill1222; AVX-NEXT:    movq (%rcx), %rax1223; AVX-NEXT:    movl $1, %ecx1224; AVX-NEXT:    .p2align 41225; AVX-NEXT:  .LBB12_1: # %loop1226; AVX-NEXT:    # =>This Inner Loop Header: Depth=11227; AVX-NEXT:    vcvtsi2sd %rcx, %xmm5, %xmm41228; AVX-NEXT:    #APP1229; AVX-NEXT:    #NO_APP1230; AVX-NEXT:    #APP1231; AVX-NEXT:    #NO_APP1232; AVX-NEXT:    #APP1233; AVX-NEXT:    #NO_APP1234; AVX-NEXT:    #APP1235; AVX-NEXT:    #NO_APP1236; AVX-NEXT:    #APP1237; AVX-NEXT:    #NO_APP1238; AVX-NEXT:    #APP1239; AVX-NEXT:    #NO_APP1240; AVX-NEXT:    #APP1241; AVX-NEXT:    #NO_APP1242; AVX-NEXT:    vaddsd (%rdx), %xmm4, %xmm01243; AVX-NEXT:    vcvttsd2si %xmm0, %r81244; AVX-NEXT:    addq %r8, %rax1245; AVX-NEXT:    incq %rcx1246; AVX-NEXT:    cmpq $156250000, %rcx # imm = 0x9502F901247; AVX-NEXT:    jne .LBB12_11248; AVX-NEXT:  # %bb.2: # %ret1249; AVX-NEXT:    vmovaps (%rsp), %xmm8 # 16-byte Reload1250; AVX-NEXT:    vmovaps {{[-0-9]+}}(%r{{[sb]}}p), %xmm9 # 16-byte Reload1251; AVX-NEXT:    vmovaps {{[-0-9]+}}(%r{{[sb]}}p), %xmm10 # 16-byte Reload1252; AVX-NEXT:    vmovaps {{[-0-9]+}}(%r{{[sb]}}p), %xmm11 # 16-byte Reload1253; AVX-NEXT:    vmovaps {{[-0-9]+}}(%r{{[sb]}}p), %xmm12 # 16-byte Reload1254; AVX-NEXT:    vmovaps {{[-0-9]+}}(%r{{[sb]}}p), %xmm13 # 16-byte Reload1255; AVX-NEXT:    vmovaps {{[-0-9]+}}(%r{{[sb]}}p), %xmm14 # 16-byte Reload1256; AVX-NEXT:    vmovaps {{[-0-9]+}}(%r{{[sb]}}p), %xmm15 # 16-byte Reload1257; AVX-NEXT:    addq $136, %rsp1258; AVX-NEXT:    retq1259entry:1260  %vx = load i64, ptr %x1261  br label %loop1262loop:1263  %i = phi i64 [ 1, %entry ], [ %inc, %loop ]1264  %s1 = phi i64 [ %vx, %entry ], [ %s2, %loop ]1265  %fi = sitofp i64 %i to double1266  tail call void asm sideeffect "", "~{xmm0},~{xmm1},~{xmm2},~{xmm3},~{dirflag},~{fpsr},~{flags}"()1267  tail call void asm sideeffect "", "~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{dirflag},~{fpsr},~{flags}"()1268  tail call void asm sideeffect "", "~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{dirflag},~{fpsr},~{flags}"()1269  tail call void asm sideeffect "", "~{xmm16},~{xmm17},~{xmm18},~{xmm19},~{dirflag},~{fpsr},~{flags}"()1270  tail call void asm sideeffect "", "~{xmm20},~{xmm21},~{xmm22},~{xmm23},~{dirflag},~{fpsr},~{flags}"()1271  tail call void asm sideeffect "", "~{xmm24},~{xmm25},~{xmm26},~{xmm27},~{dirflag},~{fpsr},~{flags}"()1272  tail call void asm sideeffect "", "~{xmm28},~{xmm29},~{xmm30},~{xmm31},~{dirflag},~{fpsr},~{flags}"()1273  %vy = load double, ptr %y1274  %fipy = fadd double %fi, %vy1275  %iipy = fptosi double %fipy to i641276  %s2 = add i64 %s1, %iipy1277  %inc = add nsw i64 %i, 11278  %exitcond = icmp eq i64 %inc, 1562500001279  br i1 %exitcond, label %ret, label %loop1280ret:1281  ret i64 %s21282}1283 1284; Make sure we are making a smart choice regarding undef registers even for more1285; complicated loop structures. This example is the inner loop from1286; julia> a = falses(10000); a[1:4:end] = true1287; julia> linspace(1.0,2.0,10000)[a]1288define dso_local void @loopclearance2(ptr nocapture %y, ptr %x, double %c1, double %c2, double %c3, double %c4, i64 %size) {1289; SSE-LINUX-LABEL: loopclearance2:1290; SSE-LINUX:       # %bb.0: # %entry1291; SSE-LINUX-NEXT:    #APP1292; SSE-LINUX-NEXT:    #NO_APP1293; SSE-LINUX-NEXT:    #APP1294; SSE-LINUX-NEXT:    #NO_APP1295; SSE-LINUX-NEXT:    #APP1296; SSE-LINUX-NEXT:    #NO_APP1297; SSE-LINUX-NEXT:    #APP1298; SSE-LINUX-NEXT:    #NO_APP1299; SSE-LINUX-NEXT:    #APP1300; SSE-LINUX-NEXT:    #NO_APP1301; SSE-LINUX-NEXT:    #APP1302; SSE-LINUX-NEXT:    #NO_APP1303; SSE-LINUX-NEXT:    #APP1304; SSE-LINUX-NEXT:    #NO_APP1305; SSE-LINUX-NEXT:    movl $1, %eax1306; SSE-LINUX-NEXT:    xorl %ecx, %ecx1307; SSE-LINUX-NEXT:    .p2align 41308; SSE-LINUX-NEXT:  .LBB13_1: # %inner_loop1309; SSE-LINUX-NEXT:    # =>This Inner Loop Header: Depth=11310; SSE-LINUX-NEXT:    movq %rcx, %r81311; SSE-LINUX-NEXT:    shrq $6, %r81312; SSE-LINUX-NEXT:    movq (%rsi,%r8,8), %r81313; SSE-LINUX-NEXT:    btq %rcx, %r81314; SSE-LINUX-NEXT:    leaq 1(%rcx), %rcx1315; SSE-LINUX-NEXT:    jae .LBB13_11316; SSE-LINUX-NEXT:  # %bb.2: # %loop_end1317; SSE-LINUX-NEXT:    # in Loop: Header=BB13_1 Depth=11318; SSE-LINUX-NEXT:    leaq 1(%rax), %r81319; SSE-LINUX-NEXT:    xorps %xmm4, %xmm41320; SSE-LINUX-NEXT:    cvtsi2sd %r8, %xmm41321; SSE-LINUX-NEXT:    movapd %xmm0, %xmm51322; SSE-LINUX-NEXT:    subsd %xmm4, %xmm51323; SSE-LINUX-NEXT:    mulsd %xmm1, %xmm51324; SSE-LINUX-NEXT:    leaq -1(%rcx), %r91325; SSE-LINUX-NEXT:    xorps %xmm4, %xmm41326; SSE-LINUX-NEXT:    cvtsi2sd %r9, %xmm41327; SSE-LINUX-NEXT:    mulsd %xmm2, %xmm41328; SSE-LINUX-NEXT:    addsd %xmm5, %xmm41329; SSE-LINUX-NEXT:    divsd %xmm3, %xmm41330; SSE-LINUX-NEXT:    movsd %xmm4, -8(%rdi,%rax,8)1331; SSE-LINUX-NEXT:    movq %r8, %rax1332; SSE-LINUX-NEXT:    cmpq %r8, %rdx1333; SSE-LINUX-NEXT:    jge .LBB13_11334; SSE-LINUX-NEXT:  # %bb.3: # %loopdone1335; SSE-LINUX-NEXT:    retq1336;1337; SSE-WIN-LABEL: loopclearance2:1338; SSE-WIN:       # %bb.0: # %entry1339; SSE-WIN-NEXT:    subq $152, %rsp1340; SSE-WIN-NEXT:    .seh_stackalloc 1521341; SSE-WIN-NEXT:    movaps %xmm15, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill1342; SSE-WIN-NEXT:    .seh_savexmm %xmm15, 1281343; SSE-WIN-NEXT:    movaps %xmm14, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill1344; SSE-WIN-NEXT:    .seh_savexmm %xmm14, 1121345; SSE-WIN-NEXT:    movaps %xmm13, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill1346; SSE-WIN-NEXT:    .seh_savexmm %xmm13, 961347; SSE-WIN-NEXT:    movaps %xmm12, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill1348; SSE-WIN-NEXT:    .seh_savexmm %xmm12, 801349; SSE-WIN-NEXT:    movaps %xmm11, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill1350; SSE-WIN-NEXT:    .seh_savexmm %xmm11, 641351; SSE-WIN-NEXT:    movaps %xmm10, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill1352; SSE-WIN-NEXT:    .seh_savexmm %xmm10, 481353; SSE-WIN-NEXT:    movaps %xmm9, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill1354; SSE-WIN-NEXT:    .seh_savexmm %xmm9, 321355; SSE-WIN-NEXT:    movaps %xmm8, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill1356; SSE-WIN-NEXT:    .seh_savexmm %xmm8, 161357; SSE-WIN-NEXT:    movaps %xmm7, (%rsp) # 16-byte Spill1358; SSE-WIN-NEXT:    .seh_savexmm %xmm7, 01359; SSE-WIN-NEXT:    .seh_endprologue1360; SSE-WIN-NEXT:    movq {{[0-9]+}}(%rsp), %rax1361; SSE-WIN-NEXT:    movsd {{.*#+}} xmm0 = mem[0],zero1362; SSE-WIN-NEXT:    movsd {{.*#+}} xmm1 = mem[0],zero1363; SSE-WIN-NEXT:    #APP1364; SSE-WIN-NEXT:    #NO_APP1365; SSE-WIN-NEXT:    #APP1366; SSE-WIN-NEXT:    #NO_APP1367; SSE-WIN-NEXT:    #APP1368; SSE-WIN-NEXT:    #NO_APP1369; SSE-WIN-NEXT:    #APP1370; SSE-WIN-NEXT:    #NO_APP1371; SSE-WIN-NEXT:    #APP1372; SSE-WIN-NEXT:    #NO_APP1373; SSE-WIN-NEXT:    #APP1374; SSE-WIN-NEXT:    #NO_APP1375; SSE-WIN-NEXT:    #APP1376; SSE-WIN-NEXT:    #NO_APP1377; SSE-WIN-NEXT:    movl $1, %r8d1378; SSE-WIN-NEXT:    xorl %r9d, %r9d1379; SSE-WIN-NEXT:    .p2align 41380; SSE-WIN-NEXT:  .LBB13_1: # %inner_loop1381; SSE-WIN-NEXT:    # =>This Inner Loop Header: Depth=11382; SSE-WIN-NEXT:    movq %r9, %r101383; SSE-WIN-NEXT:    shrq $6, %r101384; SSE-WIN-NEXT:    movq (%rdx,%r10,8), %r101385; SSE-WIN-NEXT:    btq %r9, %r101386; SSE-WIN-NEXT:    leaq 1(%r9), %r91387; SSE-WIN-NEXT:    jae .LBB13_11388; SSE-WIN-NEXT:  # %bb.2: # %loop_end1389; SSE-WIN-NEXT:    # in Loop: Header=BB13_1 Depth=11390; SSE-WIN-NEXT:    leaq 1(%r8), %r101391; SSE-WIN-NEXT:    xorps %xmm4, %xmm41392; SSE-WIN-NEXT:    cvtsi2sd %r10, %xmm41393; SSE-WIN-NEXT:    movapd %xmm2, %xmm51394; SSE-WIN-NEXT:    subsd %xmm4, %xmm51395; SSE-WIN-NEXT:    mulsd %xmm3, %xmm51396; SSE-WIN-NEXT:    leaq -1(%r9), %r111397; SSE-WIN-NEXT:    xorps %xmm4, %xmm41398; SSE-WIN-NEXT:    cvtsi2sd %r11, %xmm41399; SSE-WIN-NEXT:    mulsd %xmm1, %xmm41400; SSE-WIN-NEXT:    addsd %xmm5, %xmm41401; SSE-WIN-NEXT:    divsd %xmm0, %xmm41402; SSE-WIN-NEXT:    movsd %xmm4, -8(%rcx,%r8,8)1403; SSE-WIN-NEXT:    movq %r10, %r81404; SSE-WIN-NEXT:    cmpq %r10, %rax1405; SSE-WIN-NEXT:    jge .LBB13_11406; SSE-WIN-NEXT:  # %bb.3: # %loopdone1407; SSE-WIN-NEXT:    movaps (%rsp), %xmm7 # 16-byte Reload1408; SSE-WIN-NEXT:    movaps {{[-0-9]+}}(%r{{[sb]}}p), %xmm8 # 16-byte Reload1409; SSE-WIN-NEXT:    movaps {{[-0-9]+}}(%r{{[sb]}}p), %xmm9 # 16-byte Reload1410; SSE-WIN-NEXT:    movaps {{[-0-9]+}}(%r{{[sb]}}p), %xmm10 # 16-byte Reload1411; SSE-WIN-NEXT:    movaps {{[-0-9]+}}(%r{{[sb]}}p), %xmm11 # 16-byte Reload1412; SSE-WIN-NEXT:    movaps {{[-0-9]+}}(%r{{[sb]}}p), %xmm12 # 16-byte Reload1413; SSE-WIN-NEXT:    movaps {{[-0-9]+}}(%r{{[sb]}}p), %xmm13 # 16-byte Reload1414; SSE-WIN-NEXT:    movaps {{[-0-9]+}}(%r{{[sb]}}p), %xmm14 # 16-byte Reload1415; SSE-WIN-NEXT:    movaps {{[-0-9]+}}(%r{{[sb]}}p), %xmm15 # 16-byte Reload1416; SSE-WIN-NEXT:    .seh_startepilogue1417; SSE-WIN-NEXT:    addq $152, %rsp1418; SSE-WIN-NEXT:    .seh_endepilogue1419; SSE-WIN-NEXT:    retq1420; SSE-WIN-NEXT:    .seh_endproc1421;1422; AVX1-LABEL: loopclearance2:1423; AVX1:       # %bb.0: # %entry1424; AVX1-NEXT:    subq $152, %rsp1425; AVX1-NEXT:    .seh_stackalloc 1521426; AVX1-NEXT:    vmovaps %xmm15, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill1427; AVX1-NEXT:    .seh_savexmm %xmm15, 1281428; AVX1-NEXT:    vmovaps %xmm14, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill1429; AVX1-NEXT:    .seh_savexmm %xmm14, 1121430; AVX1-NEXT:    vmovaps %xmm13, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill1431; AVX1-NEXT:    .seh_savexmm %xmm13, 961432; AVX1-NEXT:    vmovaps %xmm12, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill1433; AVX1-NEXT:    .seh_savexmm %xmm12, 801434; AVX1-NEXT:    vmovaps %xmm11, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill1435; AVX1-NEXT:    .seh_savexmm %xmm11, 641436; AVX1-NEXT:    vmovaps %xmm10, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill1437; AVX1-NEXT:    .seh_savexmm %xmm10, 481438; AVX1-NEXT:    vmovaps %xmm9, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill1439; AVX1-NEXT:    .seh_savexmm %xmm9, 321440; AVX1-NEXT:    vmovaps %xmm8, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill1441; AVX1-NEXT:    .seh_savexmm %xmm8, 161442; AVX1-NEXT:    vmovaps %xmm7, (%rsp) # 16-byte Spill1443; AVX1-NEXT:    .seh_savexmm %xmm7, 01444; AVX1-NEXT:    .seh_endprologue1445; AVX1-NEXT:    movq {{[0-9]+}}(%rsp), %rax1446; AVX1-NEXT:    vmovsd {{.*#+}} xmm0 = mem[0],zero1447; AVX1-NEXT:    vmovsd {{.*#+}} xmm1 = mem[0],zero1448; AVX1-NEXT:    #APP1449; AVX1-NEXT:    #NO_APP1450; AVX1-NEXT:    #APP1451; AVX1-NEXT:    #NO_APP1452; AVX1-NEXT:    #APP1453; AVX1-NEXT:    #NO_APP1454; AVX1-NEXT:    #APP1455; AVX1-NEXT:    #NO_APP1456; AVX1-NEXT:    #APP1457; AVX1-NEXT:    #NO_APP1458; AVX1-NEXT:    #APP1459; AVX1-NEXT:    #NO_APP1460; AVX1-NEXT:    #APP1461; AVX1-NEXT:    #NO_APP1462; AVX1-NEXT:    movl $1, %r8d1463; AVX1-NEXT:    xorl %r9d, %r9d1464; AVX1-NEXT:    .p2align 41465; AVX1-NEXT:  .LBB13_1: # %inner_loop1466; AVX1-NEXT:    # =>This Inner Loop Header: Depth=11467; AVX1-NEXT:    movq %r9, %r101468; AVX1-NEXT:    shrq $6, %r101469; AVX1-NEXT:    movq (%rdx,%r10,8), %r101470; AVX1-NEXT:    btq %r9, %r101471; AVX1-NEXT:    leaq 1(%r9), %r91472; AVX1-NEXT:    jae .LBB13_11473; AVX1-NEXT:  # %bb.2: # %loop_end1474; AVX1-NEXT:    # in Loop: Header=BB13_1 Depth=11475; AVX1-NEXT:    leaq 1(%r8), %r101476; AVX1-NEXT:    vcvtsi2sd %r10, %xmm6, %xmm41477; AVX1-NEXT:    vsubsd %xmm4, %xmm2, %xmm41478; AVX1-NEXT:    vmulsd %xmm3, %xmm4, %xmm41479; AVX1-NEXT:    leaq -1(%r9), %r111480; AVX1-NEXT:    vcvtsi2sd %r11, %xmm6, %xmm51481; AVX1-NEXT:    vmulsd %xmm1, %xmm5, %xmm51482; AVX1-NEXT:    vaddsd %xmm5, %xmm4, %xmm41483; AVX1-NEXT:    vdivsd %xmm0, %xmm4, %xmm41484; AVX1-NEXT:    vmovsd %xmm4, -8(%rcx,%r8,8)1485; AVX1-NEXT:    movq %r10, %r81486; AVX1-NEXT:    cmpq %r10, %rax1487; AVX1-NEXT:    jge .LBB13_11488; AVX1-NEXT:  # %bb.3: # %loopdone1489; AVX1-NEXT:    vmovaps (%rsp), %xmm7 # 16-byte Reload1490; AVX1-NEXT:    vmovaps {{[-0-9]+}}(%r{{[sb]}}p), %xmm8 # 16-byte Reload1491; AVX1-NEXT:    vmovaps {{[-0-9]+}}(%r{{[sb]}}p), %xmm9 # 16-byte Reload1492; AVX1-NEXT:    vmovaps {{[-0-9]+}}(%r{{[sb]}}p), %xmm10 # 16-byte Reload1493; AVX1-NEXT:    vmovaps {{[-0-9]+}}(%r{{[sb]}}p), %xmm11 # 16-byte Reload1494; AVX1-NEXT:    vmovaps {{[-0-9]+}}(%r{{[sb]}}p), %xmm12 # 16-byte Reload1495; AVX1-NEXT:    vmovaps {{[-0-9]+}}(%r{{[sb]}}p), %xmm13 # 16-byte Reload1496; AVX1-NEXT:    vmovaps {{[-0-9]+}}(%r{{[sb]}}p), %xmm14 # 16-byte Reload1497; AVX1-NEXT:    vmovaps {{[-0-9]+}}(%r{{[sb]}}p), %xmm15 # 16-byte Reload1498; AVX1-NEXT:    .seh_startepilogue1499; AVX1-NEXT:    addq $152, %rsp1500; AVX1-NEXT:    .seh_endepilogue1501; AVX1-NEXT:    retq1502; AVX1-NEXT:    .seh_endproc1503;1504; AVX512VL-LABEL: loopclearance2:1505; AVX512VL:       # %bb.0: # %entry1506; AVX512VL-NEXT:    subq $152, %rsp1507; AVX512VL-NEXT:    .seh_stackalloc 1521508; AVX512VL-NEXT:    vmovaps %xmm15, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill1509; AVX512VL-NEXT:    .seh_savexmm %xmm15, 1281510; AVX512VL-NEXT:    vmovaps %xmm14, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill1511; AVX512VL-NEXT:    .seh_savexmm %xmm14, 1121512; AVX512VL-NEXT:    vmovaps %xmm13, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill1513; AVX512VL-NEXT:    .seh_savexmm %xmm13, 961514; AVX512VL-NEXT:    vmovaps %xmm12, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill1515; AVX512VL-NEXT:    .seh_savexmm %xmm12, 801516; AVX512VL-NEXT:    vmovaps %xmm11, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill1517; AVX512VL-NEXT:    .seh_savexmm %xmm11, 641518; AVX512VL-NEXT:    vmovaps %xmm10, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill1519; AVX512VL-NEXT:    .seh_savexmm %xmm10, 481520; AVX512VL-NEXT:    vmovaps %xmm9, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill1521; AVX512VL-NEXT:    .seh_savexmm %xmm9, 321522; AVX512VL-NEXT:    vmovaps %xmm8, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill1523; AVX512VL-NEXT:    .seh_savexmm %xmm8, 161524; AVX512VL-NEXT:    vmovaps %xmm7, (%rsp) # 16-byte Spill1525; AVX512VL-NEXT:    .seh_savexmm %xmm7, 01526; AVX512VL-NEXT:    .seh_endprologue1527; AVX512VL-NEXT:    vmovsd {{.*#+}} xmm0 = mem[0],zero1528; AVX512VL-NEXT:    movq {{[0-9]+}}(%rsp), %rax1529; AVX512VL-NEXT:    vmovsd {{.*#+}} xmm1 = mem[0],zero1530; AVX512VL-NEXT:    #APP1531; AVX512VL-NEXT:    #NO_APP1532; AVX512VL-NEXT:    #APP1533; AVX512VL-NEXT:    #NO_APP1534; AVX512VL-NEXT:    #APP1535; AVX512VL-NEXT:    #NO_APP1536; AVX512VL-NEXT:    #APP1537; AVX512VL-NEXT:    #NO_APP1538; AVX512VL-NEXT:    #APP1539; AVX512VL-NEXT:    #NO_APP1540; AVX512VL-NEXT:    #APP1541; AVX512VL-NEXT:    #NO_APP1542; AVX512VL-NEXT:    #APP1543; AVX512VL-NEXT:    #NO_APP1544; AVX512VL-NEXT:    movl $1, %r8d1545; AVX512VL-NEXT:    xorl %r9d, %r9d1546; AVX512VL-NEXT:    .p2align 41547; AVX512VL-NEXT:  .LBB13_1: # %inner_loop1548; AVX512VL-NEXT:    # =>This Inner Loop Header: Depth=11549; AVX512VL-NEXT:    movq %r9, %r101550; AVX512VL-NEXT:    shrq $6, %r101551; AVX512VL-NEXT:    movq (%rdx,%r10,8), %r101552; AVX512VL-NEXT:    btq %r9, %r101553; AVX512VL-NEXT:    leaq 1(%r9), %r91554; AVX512VL-NEXT:    jae .LBB13_11555; AVX512VL-NEXT:  # %bb.2: # %loop_end1556; AVX512VL-NEXT:    # in Loop: Header=BB13_1 Depth=11557; AVX512VL-NEXT:    leaq 1(%r8), %r101558; AVX512VL-NEXT:    vcvtsi2sd %r10, %xmm6, %xmm41559; AVX512VL-NEXT:    vsubsd %xmm4, %xmm2, %xmm41560; AVX512VL-NEXT:    vmulsd %xmm3, %xmm4, %xmm41561; AVX512VL-NEXT:    leaq -1(%r9), %r111562; AVX512VL-NEXT:    vcvtsi2sd %r11, %xmm6, %xmm51563; AVX512VL-NEXT:    vmulsd %xmm1, %xmm5, %xmm51564; AVX512VL-NEXT:    vaddsd %xmm5, %xmm4, %xmm41565; AVX512VL-NEXT:    vdivsd %xmm0, %xmm4, %xmm41566; AVX512VL-NEXT:    vmovsd %xmm4, -8(%rcx,%r8,8)1567; AVX512VL-NEXT:    movq %r10, %r81568; AVX512VL-NEXT:    cmpq %r10, %rax1569; AVX512VL-NEXT:    jge .LBB13_11570; AVX512VL-NEXT:  # %bb.3: # %loopdone1571; AVX512VL-NEXT:    vmovaps (%rsp), %xmm7 # 16-byte Reload1572; AVX512VL-NEXT:    vmovaps {{[-0-9]+}}(%r{{[sb]}}p), %xmm8 # 16-byte Reload1573; AVX512VL-NEXT:    vmovaps {{[-0-9]+}}(%r{{[sb]}}p), %xmm9 # 16-byte Reload1574; AVX512VL-NEXT:    vmovaps {{[-0-9]+}}(%r{{[sb]}}p), %xmm10 # 16-byte Reload1575; AVX512VL-NEXT:    vmovaps {{[-0-9]+}}(%r{{[sb]}}p), %xmm11 # 16-byte Reload1576; AVX512VL-NEXT:    vmovaps {{[-0-9]+}}(%r{{[sb]}}p), %xmm12 # 16-byte Reload1577; AVX512VL-NEXT:    vmovaps {{[-0-9]+}}(%r{{[sb]}}p), %xmm13 # 16-byte Reload1578; AVX512VL-NEXT:    vmovaps {{[-0-9]+}}(%r{{[sb]}}p), %xmm14 # 16-byte Reload1579; AVX512VL-NEXT:    vmovaps {{[-0-9]+}}(%r{{[sb]}}p), %xmm15 # 16-byte Reload1580; AVX512VL-NEXT:    .seh_startepilogue1581; AVX512VL-NEXT:    addq $152, %rsp1582; AVX512VL-NEXT:    .seh_endepilogue1583; AVX512VL-NEXT:    retq1584; AVX512VL-NEXT:    .seh_endproc1585entry:1586  tail call void asm sideeffect "", "~{xmm7},~{dirflag},~{fpsr},~{flags}"()1587  tail call void asm sideeffect "", "~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{dirflag},~{fpsr},~{flags}"()1588  tail call void asm sideeffect "", "~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{dirflag},~{fpsr},~{flags}"()1589  tail call void asm sideeffect "", "~{xmm16},~{xmm17},~{xmm18},~{xmm19},~{dirflag},~{fpsr},~{flags}"()1590  tail call void asm sideeffect "", "~{xmm20},~{xmm21},~{xmm22},~{xmm23},~{dirflag},~{fpsr},~{flags}"()1591  tail call void asm sideeffect "", "~{xmm24},~{xmm25},~{xmm26},~{xmm27},~{dirflag},~{fpsr},~{flags}"()1592  tail call void asm sideeffect "", "~{xmm28},~{xmm29},~{xmm30},~{xmm31},~{dirflag},~{fpsr},~{flags}"()1593  br label %loop1594 1595loop:1596  %phi_i = phi i64 [ 1, %entry ], [ %nexti, %loop_end ]1597  %phi_j = phi i64 [ 1, %entry ], [ %nextj, %loop_end ]1598  %phi_k = phi i64 [ 0, %entry ], [ %nextk, %loop_end ]1599  br label %inner_loop1600 1601inner_loop:1602  %phi = phi i64 [ %phi_k, %loop ], [ %nextk, %inner_loop ]1603  %idx = lshr i64 %phi, 61604  %inputptr = getelementptr i64, ptr %x, i64 %idx1605  %input = load i64, ptr %inputptr, align 81606  %masked = and i64 %phi, 631607  %shiftedmasked = shl i64 1, %masked1608  %maskedinput = and i64 %input, %shiftedmasked1609  %cmp = icmp eq i64 %maskedinput, 01610  %nextk = add i64 %phi, 11611  br i1 %cmp, label %inner_loop, label %loop_end1612 1613loop_end:1614  %nexti = add i64 %phi_i, 11615  %nextj = add i64 %phi_j, 11616  ; Register use, plus us clobbering 7-15 above, basically forces xmm6 here as1617  ; the only reasonable choice. The primary thing we care about is that it's1618  ; not one of the registers used in the loop (e.g. not the output reg here)1619  %nexti_f = sitofp i64 %nexti to double1620  %sub = fsub double %c1, %nexti_f1621  %mul = fmul double %sub, %c21622  %phi_f = sitofp i64 %phi to double1623  %mul2 = fmul double %phi_f, %c31624  %add2 = fadd double %mul, %mul21625  %div = fdiv double %add2, %c41626  %prev_j = add i64 %phi_j, -11627  %outptr = getelementptr double, ptr %y, i64 %prev_j1628  store double %div, ptr %outptr, align 81629  %done = icmp slt i64 %size, %nexti1630  br i1 %done, label %loopdone, label %loop1631 1632loopdone:1633  ret void1634}1635