diff options
author | Hal Finkel <hfinkel@anl.gov> | 2016-07-16 07:07:29 +0000 |
---|---|---|
committer | Hal Finkel <hfinkel@anl.gov> | 2016-07-16 07:07:29 +0000 |
commit | 04b5330ccdf93e3d051c7abe67303dd2dc973303 (patch) | |
tree | eb9b2a9a4716d9b5d0ad72c9c27dad0e0ad527e3 /llvm/lib/Target/ARM/ARMISelLowering.cpp | |
parent | a711cc7951847e3b3bf729e0df9f2ce2e17b2f11 (diff) | |
download | bcm5719-llvm-04b5330ccdf93e3d051c7abe67303dd2dc973303.tar.gz bcm5719-llvm-04b5330ccdf93e3d051c7abe67303dd2dc973303.zip |
Disable this-return argument forwarding on ARM/AArch64
r275042 reverted function-attribute inference for the 'returned' attribute
because the feature triggered self-hosting failures on ARM and AArch64. James
Molloy determined that the this-return argument forwarding feature, which
directly ties the returned input argument to the returned value, was the cause.
It seems likely that this forwarding code contains, or triggers, a subtle bug.
Disabling for now until we can track that down.
llvm-svn: 275677
Diffstat (limited to 'llvm/lib/Target/ARM/ARMISelLowering.cpp')
-rw-r--r-- | llvm/lib/Target/ARM/ARMISelLowering.cpp | 9 |
1 files changed, 8 insertions, 1 deletions
diff --git a/llvm/lib/Target/ARM/ARMISelLowering.cpp b/llvm/lib/Target/ARM/ARMISelLowering.cpp index a435923c15b..ef019f98726 100644 --- a/llvm/lib/Target/ARM/ARMISelLowering.cpp +++ b/llvm/lib/Target/ARM/ARMISelLowering.cpp @@ -65,6 +65,13 @@ ARMInterworking("arm-interworking", cl::Hidden, cl::desc("Enable / disable ARM interworking (for debugging only)"), cl::init(true)); +// Disabled for causing self-hosting failures once returned-attribute inference +// was enabled. +static cl::opt<bool> +EnableThisRetForwarding("arm-this-return-forwarding", cl::Hidden, + cl::desc("Directly forward this return"), + cl::init(false)); + namespace { class ARMCCState : public CCState { public: @@ -1466,7 +1473,7 @@ SDValue ARMTargetLowering::LowerCallResult( // Pass 'this' value directly from the argument to return value, to avoid // reg unit interference - if (i == 0 && isThisReturn) { + if (i == 0 && isThisReturn && EnableThisRetForwarding) { assert(!VA.needsCustom() && VA.getLocVT() == MVT::i32 && "unexpected return calling convention register assignment"); InVals.push_back(ThisVal); |