case BuiltinType::Double:
Out << 'd';
break;
- case BuiltinType::LongDouble:
- Out << (getASTContext().getTargetInfo().useFloat128ManglingForLongDouble()
- ? 'g'
- : 'e');
+ case BuiltinType::LongDouble: {
+ bool UseFloat128Mangling =
+ getASTContext().getTargetInfo().useFloat128ManglingForLongDouble();
+ if (getASTContext().getLangOpts().OpenMP &&
+ getASTContext().getLangOpts().OpenMPIsDevice) {
+ UseFloat128Mangling = getASTContext()
+ .getAuxTargetInfo()
+ ->useFloat128ManglingForLongDouble();
+ }
+ Out << (UseFloat128Mangling ? 'g' : 'e');
break;
- case BuiltinType::Float128:
- if (getASTContext().getTargetInfo().useFloat128ManglingForLongDouble())
+ }
+ case BuiltinType::Float128: {
+ bool UseFloat128Mangling =
+ getASTContext().getTargetInfo().useFloat128ManglingForLongDouble();
+ if (getASTContext().getLangOpts().OpenMP &&
+ getASTContext().getLangOpts().OpenMPIsDevice) {
+ UseFloat128Mangling = getASTContext()
+ .getAuxTargetInfo()
+ ->useFloat128ManglingForLongDouble();
+ }
+ if (UseFloat128Mangling)
Out << "U10__float128"; // Match the GCC mangling
else
Out << 'g';
break;
+ }
case BuiltinType::NullPtr:
Out << "Dn";
break;
// CHECK-DAG: [[T:%.+]] = type {{.+}}, fp128,
// CHECK-DAG: [[T1:%.+]] = type {{.+}}, i128, i128,
-struct T {
- char a;
#ifndef _ARCH_PPC
- __float128 f;
+typedef __float128 BIGTYPE;
#else
- long double f;
+typedef long double BIGTYPE;
#endif
+
+struct T {
+ char a;
+ BIGTYPE f;
char c;
T() : a(12), f(15) {}
T &operator+(T &b) { f += b.a; return *this;}
T1 t = bar1();
}
#pragma omp end declare target
+
+BIGTYPE foo(BIGTYPE f) {
+#pragma omp target map(f)
+ f = 1;
+ return f;
+}
+
+// CHECK: define weak void @__omp_offloading_{{.+}}foo{{.+}}_l75([[BIGTYPE:.+]]*
+// CHECK: store [[BIGTYPE]] 0xL00000000000000003FFF000000000000, [[BIGTYPE]]* %