summaryrefslogtreecommitdiffstats
path: root/clang/test/CodeGenCXX/regparm.cpp
diff options
context:
space:
mode:
authorRafael Espindola <rafael.espindola@gmail.com>2012-10-19 05:04:37 +0000
committerRafael Espindola <rafael.espindola@gmail.com>2012-10-19 05:04:37 +0000
commit703c47f80784486bc22fd77371f4423b61c4fb44 (patch)
tree964658eb0f7e024b2255786996a99b6e9ea23f94 /clang/test/CodeGenCXX/regparm.cpp
parent5e79ee087e9eacc311d4abca736c734fb1012f18 (diff)
downloadbcm5719-llvm-703c47f80784486bc22fd77371f4423b61c4fb44.tar.gz
bcm5719-llvm-703c47f80784486bc22fd77371f4423b61c4fb44.zip
Fix handling of the regparm attribute in the presence of classes with copy
constructors. When I first moved regparm support to TargetInfo.cpp I tried to isolate it in classifyArgumentTypeWithReg, but it is actually a lot easier to flip the code around and check for regparm at the end of the decision tree. Without this refactoring classifyArgumentTypeWithReg would have to duplicate the logic about when to use non-byval indirect arguments. llvm-svn: 166266
Diffstat (limited to 'clang/test/CodeGenCXX/regparm.cpp')
-rw-r--r--clang/test/CodeGenCXX/regparm.cpp21
1 files changed, 21 insertions, 0 deletions
diff --git a/clang/test/CodeGenCXX/regparm.cpp b/clang/test/CodeGenCXX/regparm.cpp
index f0ebd2be416..07e9aa046ef 100644
--- a/clang/test/CodeGenCXX/regparm.cpp
+++ b/clang/test/CodeGenCXX/regparm.cpp
@@ -4,3 +4,24 @@
// CHECK: _Z3fooRi(i32* inreg
void __attribute__ ((regparm (1))) foo(int &a) {
}
+
+struct S1 {
+ int x;
+ S1(const S1 &y);
+};
+
+void __attribute__((regparm(3))) foo2(S1 a, int b);
+// CHECK: declare void @_Z4foo22S1i(%struct.S1* inreg, i32 inreg)
+void bar2(S1 a, int b) {
+ foo2(a, b);
+}
+
+struct S2 {
+ int x;
+};
+
+void __attribute__((regparm(3))) foo3(struct S2 a, int b);
+// declare void @_Z4foo12S1i(i32 inreg, i32 inreg) optsize
+void bar3(struct S2 a, int b) {
+ foo3(a, b);
+}
OpenPOWER on IntegriCloud