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. llvm-svn: 158932
This commit is contained in:
parent
8cf439f85a
commit
a86b0f20dd
|
@ -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;
|
||||
}
|
||||
|
|
|
@ -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…
Reference in New Issue