55 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py2; RUN: llc -mtriple=x86_64-apple-macosx10.9.0 -mcpu=core2 -mattr=+64bit,+sse2 < %s | FileCheck %s3 4; DAGCombine may choose to rewrite 2 loads feeding a select as a select of5; addresses feeding a load. This test ensures that when it does that it creates6; a load with alignment equivalent to the most restrictive source load.7 8declare void @sink(<2 x double>)9 10define void @test1(i1 %cmp) align 2 {11; CHECK-LABEL: test1:12; CHECK: ## %bb.0:13; CHECK-NEXT: subq $40, %rsp14; CHECK-NEXT: .cfi_def_cfa_offset 4815; CHECK-NEXT: testb $1, %dil16; CHECK-NEXT: movq %rsp, %rax17; CHECK-NEXT: leaq {{[0-9]+}}(%rsp), %rcx18; CHECK-NEXT: cmovneq %rax, %rcx19; CHECK-NEXT: movups (%rcx), %xmm020; CHECK-NEXT: callq _sink21; CHECK-NEXT: addq $40, %rsp22; CHECK-NEXT: retq23 %1 = alloca <2 x double>, align 1624 %2 = alloca <2 x double>, align 825 26 %val = load <2 x double>, ptr %1, align 1627 %val2 = load <2 x double>, ptr %2, align 828 %val3 = select i1 %cmp, <2 x double> %val, <2 x double> %val229 call void @sink(<2 x double> %val3)30 ret void31}32 33define void @test2(i1 %cmp) align 2 {34; CHECK-LABEL: test2:35; CHECK: ## %bb.0:36; CHECK-NEXT: subq $40, %rsp37; CHECK-NEXT: .cfi_def_cfa_offset 4838; CHECK-NEXT: testb $1, %dil39; CHECK-NEXT: movq %rsp, %rax40; CHECK-NEXT: leaq {{[0-9]+}}(%rsp), %rcx41; CHECK-NEXT: cmovneq %rax, %rcx42; CHECK-NEXT: movaps (%rcx), %xmm043; CHECK-NEXT: callq _sink44; CHECK-NEXT: addq $40, %rsp45; CHECK-NEXT: retq46 %1 = alloca <2 x double>, align 1647 %2 = alloca <2 x double>, align 848 49 %val = load <2 x double>, ptr %1, align 1650 %val2 = load <2 x double>, ptr %2, align 1651 %val3 = select i1 %cmp, <2 x double> %val, <2 x double> %val252 call void @sink(<2 x double> %val3)53 ret void54}55