mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2025-01-13 09:33:50 +00:00
Treat TargetGlobalAddress as a constant for the purpose of matching pre-inc stores on PPC.
Thanks to Tobias von Koch for pointing out this problem. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@158932 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
343c32a39c
commit
2bbc9193b4
@ -111,7 +111,8 @@ namespace {
|
||||
/// immediate field. Because preinc imms have already been validated, just
|
||||
/// accept it.
|
||||
bool SelectAddrImmOffs(SDValue N, SDValue &Out) const {
|
||||
if (isa<ConstantSDNode>(N)) {
|
||||
if (isa<ConstantSDNode>(N) || N.getOpcode() == PPCISD::Lo ||
|
||||
N.getOpcode() == ISD::TargetGlobalAddress) {
|
||||
Out = N;
|
||||
return true;
|
||||
}
|
||||
@ -123,6 +124,10 @@ namespace {
|
||||
/// index field. Because preinc imms have already been validated, just
|
||||
/// accept it.
|
||||
bool SelectAddrIdxOffs(SDValue N, SDValue &Out) const {
|
||||
if (isa<ConstantSDNode>(N) || N.getOpcode() == PPCISD::Lo ||
|
||||
N.getOpcode() == ISD::TargetGlobalAddress)
|
||||
return false;
|
||||
|
||||
Out = N;
|
||||
return true;
|
||||
}
|
||||
|
22
test/CodeGen/PowerPC/stwu-gta.ll
Normal file
22
test/CodeGen/PowerPC/stwu-gta.ll
Normal file
@ -0,0 +1,22 @@
|
||||
target datalayout = "E-p:32:32:32-i1:8:8-i8:8:8-i16:16:16-i32:32:32-i64:64:64-f32:32:32-f64:64:64-v128:128:128-n32"
|
||||
target triple = "powerpc-unknown-linux"
|
||||
; RUN: llc < %s | FileCheck %s
|
||||
|
||||
%class.Two.0.5 = type { i32, i32, i32 }
|
||||
|
||||
@foo = external global %class.Two.0.5, align 4
|
||||
|
||||
define void @_GLOBAL__I_a() nounwind section ".text.startup" {
|
||||
entry:
|
||||
store i32 5, i32* getelementptr inbounds (%class.Two.0.5* @foo, i32 0, i32 0), align 4, !tbaa !0
|
||||
store i32 6, i32* getelementptr inbounds (%class.Two.0.5* @foo, i32 0, i32 1), align 4, !tbaa !0
|
||||
ret void
|
||||
}
|
||||
|
||||
; CHECK: @_GLOBAL__I_a
|
||||
; CHECK-NOT: stwux
|
||||
; CHECK: stwu
|
||||
|
||||
!0 = metadata !{metadata !"int", metadata !1}
|
||||
!1 = metadata !{metadata !"omnipotent char", metadata !2}
|
||||
!2 = metadata !{metadata !"Simple C/C++ TBAA"}
|
Loading…
x
Reference in New Issue
Block a user