mirror of
https://github.com/RPCSX/llvm.git
synced 2024-11-27 13:40:30 +00:00
4868a15090
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 git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@303679 91177308-0d34-0410-b5e6-96231b3b80d8
22 lines
928 B
LLVM
22 lines
928 B
LLVM
; 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"
|
|
|
|
@fn1.a = private unnamed_addr constant [4 x i16] [i16 6, i16 0, i16 0, i16 0], align 2
|
|
|
|
; We must not try and emit this bad instruction: "ldrh r1, .LCPI0_0"
|
|
; CHECK-LABEL: fn1:
|
|
; CHECK: adr [[base:r[0-9]+]], .LCPI0_0
|
|
; CHECK-NOT: ldrh {{r[0-9]+}}, .LCPI0_0
|
|
; CHECK: ldrh r{{[0-9]+}}, {{\[}}[[base]]]
|
|
define hidden i32 @fn1() #0 {
|
|
entry:
|
|
call void @llvm.memcpy.p0i8.p0i8.i32(i8* undef, i8* bitcast ([4 x i16]* @fn1.a to i8*), i32 8, i32 2, i1 false)
|
|
ret i32 undef
|
|
}
|
|
|
|
; Function Attrs: argmemonly nounwind
|
|
declare void @llvm.memcpy.p0i8.p0i8.i32(i8* nocapture writeonly, i8* nocapture readonly, i32, i32, i1)
|
|
attributes #0 = { "target-features"="+strict-align" }
|