// that are strings for simplicity.
auto *CDAInit = dyn_cast<ConstantDataArray>(Init);
unsigned Size = DAG.getDataLayout().getTypeAllocSize(Init->getType());
- unsigned Align = DAG.getDataLayout().getABITypeAlignment(Init->getType());
+ unsigned Align = GVar->getAlignment();
unsigned RequiredPadding = 4 - (Size % 4);
bool PaddingPossible =
RequiredPadding == 4 || (CDAInit && CDAInit->isString());
@.arr2 = private unnamed_addr constant [2 x i16] [i16 7, i16 8], align 2
@.arr3 = private unnamed_addr constant [2 x i16*] [i16* null, i16* null], align 4
@.ptr = private unnamed_addr constant [2 x i16*] [i16* getelementptr inbounds ([2 x i16], [2 x i16]* @.arr2, i32 0, i32 0), i16* null], align 2
+@.arr4 = private unnamed_addr constant [2 x i16] [i16 3, i16 4], align 16
; CHECK-LABEL: @test1
; CHECK: adr r0, [[x:.*]]
ret void
}
+; This shouldn't be promoted, as the global requires >4 byte alignment.
+; CHECK-LABEL: @test9
+; CHECK-NOT: adr
+define void @test9() #0 {
+ tail call void @c(i16* getelementptr inbounds ([2 x i16], [2 x i16]* @.arr4, i32 0, i32 0)) #2
+ ret void
+}
+
+
declare void @b(i8*) #1
declare void @c(i16*) #1
declare void @llvm.memcpy.p0i8.p0i8.i32(i8* nocapture writeonly, i8* nocapture readonly, i32, i32, i1)