chh created this revision.
chh added reviewers: majnemer, echristo.
chh added subscribers: cfe-commits, davidxl, rnk, enh, tberghammer, danalbert,
srhines.
These changes are for Android x86_64 targets to be compatible with current
Android g++.
https://llvm.org/bugs/show_bug.cgi?id=23897
* Use 'g' and 'Cg' for "long double" and "long double _Complex"
mangled type names.
http://reviews.llvm.org/D11466
Files:
lib/Basic/Targets.cpp
test/CodeGen/x86-long-double.cpp
Index: test/CodeGen/x86-long-double.cpp
===================================================================
--- /dev/null
+++ test/CodeGen/x86-long-double.cpp
@@ -0,0 +1,22 @@
+// RUN: %clang -target x86_64-linux-android -emit-llvm -O -S -o - %s \
+// RUN: | FileCheck %s --check-prefix=A64
+// RUN: %clang -target x86_64-linux-gnu -emit-llvm -O -S -o - %s \
+// RUN: | FileCheck %s --check-prefix=G64
+// RUN: %clang -target powerpc64-linux-gnu -emit-llvm -O -S -o - %s \
+// RUN: | FileCheck %s --check-prefix=P64
+// RUN: %clang -target i686-linux-android -emit-llvm -O -S -o - %s \
+// RUN: | FileCheck %s --check-prefix=A32
+// RUN: %clang -target i686-linux-gnu -emit-llvm -O -S -o - %s \
+// RUN: | FileCheck %s --check-prefix=G32
+// RUN: %clang -target powerpc-linux-gnu -emit-llvm -O -S -o - %s \
+// RUN: | FileCheck %s --check-prefix=P32
+
+// Check mangled name of long double.
+// Android's gcc and llvm use fp128 for long double.
+void test(long, float, double, long double, long double _Complex) { }
+// A64: define void @_Z4testlfdgCg(i64, float, double, fp128, { fp128, fp128
}*
+// G64: define void @_Z4testlfdeCe(i64, float, double, x86_fp80, { x86_fp80,
x86_fp80 }*
+// P64: define void @_Z4testlfdgCg(i64, float, double, ppc_fp128, ppc_fp128
{{.*}}, ppc_fp128
+// A32: define void @_Z4testlfdeCe(i32, float, double, double, { double,
double }*
+// G32: define void @_Z4testlfdeCe(i32, float, double, x86_fp80, { x86_fp80,
x86_fp80 }*
+// P32: define void @_Z4testlfdgCg(i32, float, double, ppc_fp128, {
ppc_fp128, ppc_fp128 }*
Index: lib/Basic/Targets.cpp
===================================================================
--- lib/Basic/Targets.cpp
+++ lib/Basic/Targets.cpp
@@ -7014,6 +7014,10 @@
: LinuxTargetInfo<X86_64TargetInfo>(Triple) {
LongDoubleFormat = &llvm::APFloat::IEEEquad;
}
+
+ bool useFloat128ManglingForLongDouble() const override {
+ return true;
+ }
};
} // end anonymous namespace
Index: test/CodeGen/x86-long-double.cpp
===================================================================
--- /dev/null
+++ test/CodeGen/x86-long-double.cpp
@@ -0,0 +1,22 @@
+// RUN: %clang -target x86_64-linux-android -emit-llvm -O -S -o - %s \
+// RUN: | FileCheck %s --check-prefix=A64
+// RUN: %clang -target x86_64-linux-gnu -emit-llvm -O -S -o - %s \
+// RUN: | FileCheck %s --check-prefix=G64
+// RUN: %clang -target powerpc64-linux-gnu -emit-llvm -O -S -o - %s \
+// RUN: | FileCheck %s --check-prefix=P64
+// RUN: %clang -target i686-linux-android -emit-llvm -O -S -o - %s \
+// RUN: | FileCheck %s --check-prefix=A32
+// RUN: %clang -target i686-linux-gnu -emit-llvm -O -S -o - %s \
+// RUN: | FileCheck %s --check-prefix=G32
+// RUN: %clang -target powerpc-linux-gnu -emit-llvm -O -S -o - %s \
+// RUN: | FileCheck %s --check-prefix=P32
+
+// Check mangled name of long double.
+// Android's gcc and llvm use fp128 for long double.
+void test(long, float, double, long double, long double _Complex) { }
+// A64: define void @_Z4testlfdgCg(i64, float, double, fp128, { fp128, fp128 }*
+// G64: define void @_Z4testlfdeCe(i64, float, double, x86_fp80, { x86_fp80, x86_fp80 }*
+// P64: define void @_Z4testlfdgCg(i64, float, double, ppc_fp128, ppc_fp128 {{.*}}, ppc_fp128
+// A32: define void @_Z4testlfdeCe(i32, float, double, double, { double, double }*
+// G32: define void @_Z4testlfdeCe(i32, float, double, x86_fp80, { x86_fp80, x86_fp80 }*
+// P32: define void @_Z4testlfdgCg(i32, float, double, ppc_fp128, { ppc_fp128, ppc_fp128 }*
Index: lib/Basic/Targets.cpp
===================================================================
--- lib/Basic/Targets.cpp
+++ lib/Basic/Targets.cpp
@@ -7014,6 +7014,10 @@
: LinuxTargetInfo<X86_64TargetInfo>(Triple) {
LongDoubleFormat = &llvm::APFloat::IEEEquad;
}
+
+ bool useFloat128ManglingForLongDouble() const override {
+ return true;
+ }
};
} // end anonymous namespace
_______________________________________________
cfe-commits mailing list
[email protected]
http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits