Skip to content

Commit

Permalink
[ARM] Fix PR32130: Handle promotion of zero sized constants.
Browse files Browse the repository at this point in the history
The special case of zero sized values was previously not handled correctly.
This patch handles this by not promoting if the size is zero.

Patch by Tim Neumann.

Differential Revision: https://reviews.llvm.org/D31116

llvm-svn: 298320
  • Loading branch information
pftbest committed Mar 20, 2017
1 parent 5ba576f commit ba789cb
Show file tree
Hide file tree
Showing 2 changed files with 11 additions and 1 deletion.
3 changes: 2 additions & 1 deletion llvm/lib/Target/ARM/ARMISelLowering.cpp
Expand Up @@ -3063,7 +3063,8 @@ static SDValue promoteToConstantPool(const GlobalValue *GV, SelectionDAG &DAG,
unsigned RequiredPadding = 4 - (Size % 4);
bool PaddingPossible =
RequiredPadding == 4 || (CDAInit && CDAInit->isString());
if (!PaddingPossible || Align > 4 || Size > ConstpoolPromotionMaxSize)
if (!PaddingPossible || Align > 4 || Size > ConstpoolPromotionMaxSize ||
Size == 0)
return SDValue();

unsigned PaddedSize = Size + ((RequiredPadding == 4) ? 0 : RequiredPadding);
Expand Down
9 changes: 9 additions & 0 deletions llvm/test/CodeGen/ARM/constantpool-promote.ll
Expand Up @@ -21,6 +21,7 @@
@.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
@.zerosize = private unnamed_addr constant [0 x i16] zeroinitializer, align 4

; CHECK-LABEL: @test1
; CHECK: adr r0, [[x:.*]]
Expand Down Expand Up @@ -139,6 +140,14 @@ define void @test9() #0 {
ret void
}

; Ensure that zero sized values are supported / not promoted.
; CHECK-LABEL: @pr32130
; CHECK-NOT: adr
define void @pr32130() #0 {
tail call void @c(i16* getelementptr inbounds ([0 x i16], [0 x i16]* @.zerosize, i32 0, i32 0)) #2
ret void
}

; CHECK-LABEL: @test10
; CHECK-V6M: adr r{{[0-9]*}}, [[x:.*]]
; CHECK-V6M: [[x]]:
Expand Down

0 comments on commit ba789cb

Please sign in to comment.