Commit 0acbdf3f authored by Tom Stellard's avatar Tom Stellard
Browse files

Merging r303679:

------------------------------------------------------------------------
r303679 | oleg | 2017-05-23 15:38:37 -0400 (Tue, 23 May 2017) | 16 lines

[ARM] Temporarily disable globals promotion to constant pools to prevent miscompilation

Summary:
A temporary workaround for PR32780 - rematerialized instructions accessing the same promoted global through different constant pool entries.

The patch turns off the globals promotion optimization leaving all its code in place, so that it can be easily turned on once PR32780 is fixed.

Since this is a miscompilation issue causing generation of misbehaving code, and the problem is very subtle, the patch might be valuable enough to get into 4.0.1.

Reviewers: efriedma, jmolloy

Reviewed By: efriedma

Subscribers: aemerson, javed.absar, llvm-commits, rengolin, asl, tstellar

Differential Revision: https://reviews.llvm.org/D33446
------------------------------------------------------------------------

llvm-svn: 303749
parent 7f150d5d
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
@@ -72,7 +72,7 @@ static cl::opt<bool> EnableConstpoolPromotion(
    "arm-promote-constant", cl::Hidden,
    cl::desc("Enable / disable promotion of unnamed_addr constants into "
             "constant pools"),
    cl::init(true));
    cl::init(false)); // FIXME: set to true by default once PR32780 is fixed
static cl::opt<unsigned> ConstpoolPromotionMaxSize(
    "arm-promote-constant-max-size", cl::Hidden,
    cl::desc("Maximum size of constant to promote into a constant pool"),
+1 −1
Original line number Diff line number Diff line
; RUN: llc -relocation-model=static < %s | FileCheck %s
; RUN: llc -relocation-model=static -arm-promote-constant < %s | FileCheck %s

target datalayout = "e-m:e-p:32:32-i64:64-v128:64:128-a:0:32-n32-S64"
target triple = "thumbv7m--linux-gnu"
+2 −2
Original line number Diff line number Diff line
; RUN: llc < %s -O0 -fast-isel=false | FileCheck %s
; RUN: llc < %s -O0 -fast-isel=false -filetype=obj
; RUN: llc < %s -O0 -fast-isel=false -arm-promote-constant | FileCheck %s
; RUN: llc < %s -O0 -fast-isel=false -filetype=obj -arm-promote-constant
target datalayout = "e-m:e-p:32:32-i64:64-v128:64:128-a:0:32-n32-S64"
target triple = "thumbv6m-arm-linux-gnueabi"

+4 −4
Original line number Diff line number Diff line
; RUN: llc -relocation-model=static < %s | FileCheck %s
; RUN: llc -relocation-model=pic < %s | FileCheck %s
; RUN: llc -relocation-model=ropi < %s | FileCheck %s
; RUN: llc -relocation-model=rwpi < %s | FileCheck %s
; RUN: llc -relocation-model=static -arm-promote-constant < %s | FileCheck %s
; RUN: llc -relocation-model=pic -arm-promote-constant < %s | FileCheck %s
; RUN: llc -relocation-model=ropi -arm-promote-constant < %s | FileCheck %s
; RUN: llc -relocation-model=rwpi -arm-promote-constant < %s | FileCheck %s

target datalayout = "e-m:e-p:32:32-i64:64-v128:64:128-n32-S64"
target triple = "armv7--linux-gnueabihf"