r272148 - [Sparc] Complex return value ABI compliance.
Chris Dewhurst via cfe-commits
cfe-commits at lists.llvm.org
Wed Jun 8 07:46:06 PDT 2016
Author: lerochris
Date: Wed Jun 8 09:46:05 2016
New Revision: 272148
URL: http://llvm.org/viewvc/llvm-project?rev=272148&view=rev
Log:
[Sparc] Complex return value ABI compliance.
According to the Sparc V8 ABI, complex numbers should be passed and returned as pairs of registers:
https://docs.oracle.com/cd/E26502_01/html/E28387/gentextid-2734.html
This fix ensures this is the case. Without this, complex numbers are returned as a struct of two floats, which breaks the ABI rules.
Differential Review: http://reviews.llvm.org/D20955
Added:
cfe/trunk/test/CodeGen/sparcv8-abi.c (with props)
Added: cfe/trunk/test/CodeGen/sparcv8-abi.c
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/CodeGen/sparcv8-abi.c?rev=272148&view=auto
==============================================================================
--- cfe/trunk/test/CodeGen/sparcv8-abi.c (added)
+++ cfe/trunk/test/CodeGen/sparcv8-abi.c Wed Jun 8 09:46:05 2016
@@ -0,0 +1,19 @@
+// RUN: %clang_cc1 -triple sparc-unknown-unknown -emit-llvm %s -o - | FileCheck %s
+
+// CHECK-LABEL: define { float, float } @p({ float, float }* byval align 4 %a, { float, float }* byval align 4 %b) #0 {
+float __complex__
+p (float __complex__ a, float __complex__ b)
+{
+}
+
+// CHECK-LABEL: define { double, double } @q({ double, double }* byval align 8 %a, { double, double }* byval align 8 %b) #0 {
+double __complex__
+q (double __complex__ a, double __complex__ b)
+{
+}
+
+// CHECK-LABEL: define { i64, i64 } @r({ i64, i64 }* byval align 8 %a, { i64, i64 }* byval align 8 %b) #0 {
+long long __complex__
+r (long long __complex__ a, long long __complex__ b)
+{
+}
Propchange: cfe/trunk/test/CodeGen/sparcv8-abi.c
------------------------------------------------------------------------------
svn:eol-style = native
More information about the cfe-commits
mailing list