summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorRafael Espindola <rafael.espindola@gmail.com>2011-11-27 18:35:39 +0000
committerRafael Espindola <rafael.espindola@gmail.com>2011-11-27 18:35:39 +0000
commit32d8a275b9e4c1231bf18ccdcbf37667b5420e6a (patch)
tree5cdd5c1e8c04a1c8754281c0868b4adadfae7cb7
parent251d827d2cbca924ed502dac381e3385707c024c (diff)
downloadbcm5719-llvm-32d8a275b9e4c1231bf18ccdcbf37667b5420e6a.tar.gz
bcm5719-llvm-32d8a275b9e4c1231bf18ccdcbf37667b5420e6a.zip
Add inreg attributes to reference arguments.
llvm-svn: 145189
-rw-r--r--clang/lib/CodeGen/CGCall.cpp3
-rw-r--r--clang/test/CodeGenCXX/regparm.cpp6
2 files changed, 8 insertions, 1 deletions
diff --git a/clang/lib/CodeGen/CGCall.cpp b/clang/lib/CodeGen/CGCall.cpp
index 7ff16dd9512..4f2210f10e4 100644
--- a/clang/lib/CodeGen/CGCall.cpp
+++ b/clang/lib/CodeGen/CGCall.cpp
@@ -831,7 +831,8 @@ void CodeGenModule::ConstructAttributeList(const CGFunctionInfo &FI,
// FALL THROUGH
case ABIArgInfo::Direct:
if (RegParm > 0 &&
- (ParamType->isIntegerType() || ParamType->isPointerType())) {
+ (ParamType->isIntegerType() || ParamType->isPointerType() ||
+ ParamType->isReferenceType())) {
RegParm -=
(Context.getTypeSize(ParamType) + PointerWidth - 1) / PointerWidth;
if (RegParm >= 0)
diff --git a/clang/test/CodeGenCXX/regparm.cpp b/clang/test/CodeGenCXX/regparm.cpp
new file mode 100644
index 00000000000..f0ebd2be416
--- /dev/null
+++ b/clang/test/CodeGenCXX/regparm.cpp
@@ -0,0 +1,6 @@
+// RUN: %clang_cc1 -triple i386-unknown-unknown %s -emit-llvm -o - | FileCheck %s
+
+
+// CHECK: _Z3fooRi(i32* inreg
+void __attribute__ ((regparm (1))) foo(int &a) {
+}
OpenPOWER on IntegriCloud