1*9880d681SAndroid Build Coastguard Worker; RUN: llc < %s -mtriple=armv7-apple-ios -O0 | FileCheck %s -check-prefix=NO-REALIGN 2*9880d681SAndroid Build Coastguard Worker; RUN: llc < %s -mtriple=armv7-apple-ios -O0 | FileCheck %s -check-prefix=REALIGN 3*9880d681SAndroid Build Coastguard Worker 4*9880d681SAndroid Build Coastguard Worker; rdar://12713765 5*9880d681SAndroid Build Coastguard Worker; When realign-stack is set to false, make sure we are not creating stack 6*9880d681SAndroid Build Coastguard Worker; objects that are assumed to be 64-byte aligned. 7*9880d681SAndroid Build Coastguard Worker@T3_retval = common global <16 x float> zeroinitializer, align 16 8*9880d681SAndroid Build Coastguard Worker 9*9880d681SAndroid Build Coastguard Workerdefine void @test1(<16 x float>* noalias sret %agg.result) nounwind ssp "no-realign-stack" { 10*9880d681SAndroid Build Coastguard Workerentry: 11*9880d681SAndroid Build Coastguard Worker; NO-REALIGN-LABEL: test1 12*9880d681SAndroid Build Coastguard Worker; NO-REALIGN: mov r[[R2:[0-9]+]], r[[R1:[0-9]+]] 13*9880d681SAndroid Build Coastguard Worker; NO-REALIGN: vld1.32 {{{d[0-9]+, d[0-9]+}}}, [r[[R2]]:128]! 14*9880d681SAndroid Build Coastguard Worker; NO-REALIGN: vld1.64 {{{d[0-9]+, d[0-9]+}}}, [r[[R2]]:128] 15*9880d681SAndroid Build Coastguard Worker; NO-REALIGN: add r[[R2:[0-9]+]], r[[R1]], #32 16*9880d681SAndroid Build Coastguard Worker; NO-REALIGN: vld1.64 {{{d[0-9]+, d[0-9]+}}}, [r[[R2]]:128] 17*9880d681SAndroid Build Coastguard Worker; NO-REALIGN: add r[[R2:[0-9]+]], r[[R1]], #48 18*9880d681SAndroid Build Coastguard Worker; NO-REALIGN: vld1.64 {{{d[0-9]+, d[0-9]+}}}, [r[[R2]]:128] 19*9880d681SAndroid Build Coastguard Worker 20*9880d681SAndroid Build Coastguard Worker; NO-REALIGN: add r[[R2:[0-9]+]], r[[R1:[0-9]+]], #48 21*9880d681SAndroid Build Coastguard Worker; NO-REALIGN: vst1.64 {{{d[0-9]+, d[0-9]+}}}, [r[[R2]]:128] 22*9880d681SAndroid Build Coastguard Worker; NO-REALIGN: add r[[R2:[0-9]+]], r[[R1]], #32 23*9880d681SAndroid Build Coastguard Worker; NO-REALIGN: vst1.64 {{{d[0-9]+, d[0-9]+}}}, [r[[R2]]:128] 24*9880d681SAndroid Build Coastguard Worker; NO-REALIGN: vst1.32 {{{d[0-9]+, d[0-9]+}}}, [r[[R1]]:128]! 25*9880d681SAndroid Build Coastguard Worker; NO-REALIGN: vst1.64 {{{d[0-9]+, d[0-9]+}}}, [r[[R1]]:128] 26*9880d681SAndroid Build Coastguard Worker 27*9880d681SAndroid Build Coastguard Worker; NO-REALIGN: add r[[R2:[0-9]+]], r[[R0:0]], #48 28*9880d681SAndroid Build Coastguard Worker; NO-REALIGN: vst1.64 {{{d[0-9]+, d[0-9]+}}}, [r[[R2]]:128] 29*9880d681SAndroid Build Coastguard Worker; NO-REALIGN: add r[[R2:[0-9]+]], r[[R0]], #32 30*9880d681SAndroid Build Coastguard Worker; NO-REALIGN: vst1.64 {{{d[0-9]+, d[0-9]+}}}, [r[[R2]]:128] 31*9880d681SAndroid Build Coastguard Worker; NO-REALIGN: vst1.32 {{{d[0-9]+, d[0-9]+}}}, [r[[R0]]:128]! 32*9880d681SAndroid Build Coastguard Worker; NO-REALIGN: vst1.64 {{{d[0-9]+, d[0-9]+}}}, [r[[R0]]:128] 33*9880d681SAndroid Build Coastguard Worker %retval = alloca <16 x float>, align 16 34*9880d681SAndroid Build Coastguard Worker %0 = load <16 x float>, <16 x float>* @T3_retval, align 16 35*9880d681SAndroid Build Coastguard Worker store <16 x float> %0, <16 x float>* %retval 36*9880d681SAndroid Build Coastguard Worker %1 = load <16 x float>, <16 x float>* %retval 37*9880d681SAndroid Build Coastguard Worker store <16 x float> %1, <16 x float>* %agg.result, align 16 38*9880d681SAndroid Build Coastguard Worker ret void 39*9880d681SAndroid Build Coastguard Worker} 40*9880d681SAndroid Build Coastguard Worker 41*9880d681SAndroid Build Coastguard Workerdefine void @test2(<16 x float>* noalias sret %agg.result) nounwind ssp { 42*9880d681SAndroid Build Coastguard Workerentry: 43*9880d681SAndroid Build Coastguard Worker; REALIGN-LABEL: test2 44*9880d681SAndroid Build Coastguard Worker; REALIGN: bfc sp, #0, #6 45*9880d681SAndroid Build Coastguard Worker; REALIGN: mov r[[R2:[0-9]+]], r[[R1:[0-9]+]] 46*9880d681SAndroid Build Coastguard Worker; REALIGN: vld1.32 {{{d[0-9]+, d[0-9]+}}}, [r[[R2]]:128]! 47*9880d681SAndroid Build Coastguard Worker; REALIGN: vld1.64 {{{d[0-9]+, d[0-9]+}}}, [r[[R2]]:128] 48*9880d681SAndroid Build Coastguard Worker; REALIGN: add r[[R2:[0-9]+]], r[[R1]], #32 49*9880d681SAndroid Build Coastguard Worker; REALIGN: vld1.64 {{{d[0-9]+, d[0-9]+}}}, [r[[R2]]:128] 50*9880d681SAndroid Build Coastguard Worker; REALIGN: add r[[R2:[0-9]+]], r[[R1]], #48 51*9880d681SAndroid Build Coastguard Worker; REALIGN: vld1.64 {{{d[0-9]+, d[0-9]+}}}, [r[[R2]]:128] 52*9880d681SAndroid Build Coastguard Worker 53*9880d681SAndroid Build Coastguard Worker 54*9880d681SAndroid Build Coastguard Worker; REALIGN: orr r[[R2:[0-9]+]], r[[R1:[0-9]+]], #48 55*9880d681SAndroid Build Coastguard Worker; REALIGN: vst1.64 {{{d[0-9]+, d[0-9]+}}}, [r[[R2]]:128] 56*9880d681SAndroid Build Coastguard Worker; REALIGN: orr r[[R2:[0-9]+]], r[[R1]], #32 57*9880d681SAndroid Build Coastguard Worker; REALIGN: vst1.64 {{{d[0-9]+, d[0-9]+}}}, [r[[R2]]:128] 58*9880d681SAndroid Build Coastguard Worker; REALIGN: orr r[[R2:[0-9]+]], r[[R1]], #16 59*9880d681SAndroid Build Coastguard Worker; REALIGN: vst1.64 {{{d[0-9]+, d[0-9]+}}}, [r[[R2]]:128] 60*9880d681SAndroid Build Coastguard Worker; REALIGN: vst1.64 {{{d[0-9]+, d[0-9]+}}}, [r[[R1]]:128] 61*9880d681SAndroid Build Coastguard Worker 62*9880d681SAndroid Build Coastguard Worker; REALIGN: add r[[R1:[0-9]+]], r[[R0:0]], #48 63*9880d681SAndroid Build Coastguard Worker; REALIGN: vst1.64 {{{d[0-9]+, d[0-9]+}}}, [r[[R1]]:128] 64*9880d681SAndroid Build Coastguard Worker; REALIGN: add r[[R1:[0-9]+]], r[[R0]], #32 65*9880d681SAndroid Build Coastguard Worker; REALIGN: vst1.64 {{{d[0-9]+, d[0-9]+}}}, [r[[R1]]:128] 66*9880d681SAndroid Build Coastguard Worker; REALIGN: vst1.32 {{{d[0-9]+, d[0-9]+}}}, [r[[R0]]:128]! 67*9880d681SAndroid Build Coastguard Worker; REALIGN: vst1.64 {{{d[0-9]+, d[0-9]+}}}, [r[[R0]]:128] 68*9880d681SAndroid Build Coastguard Worker %retval = alloca <16 x float>, align 16 69*9880d681SAndroid Build Coastguard Worker %0 = load <16 x float>, <16 x float>* @T3_retval, align 16 70*9880d681SAndroid Build Coastguard Worker store <16 x float> %0, <16 x float>* %retval 71*9880d681SAndroid Build Coastguard Worker %1 = load <16 x float>, <16 x float>* %retval 72*9880d681SAndroid Build Coastguard Worker store <16 x float> %1, <16 x float>* %agg.result, align 16 73*9880d681SAndroid Build Coastguard Worker ret void 74*9880d681SAndroid Build Coastguard Worker} 75