summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAnton Korobeynikov <anton@korobeynikov.info>2019-01-25 08:51:53 +0000
committerAnton Korobeynikov <anton@korobeynikov.info>2019-01-25 08:51:53 +0000
commit58f6bc509b365aa8516acc03c85b5d0712cf4af6 (patch)
tree73827d51d892743b340c7cc4896897e404d27df2
parent6f2a0c682736dce8bef979a81a2b2b79a33f1c4e (diff)
downloadbcm5719-llvm-58f6bc509b365aa8516acc03c85b5d0712cf4af6.tar.gz
bcm5719-llvm-58f6bc509b365aa8516acc03c85b5d0712cf4af6.zip
[MSP430] Ajust f32/f64 alignment according to MSP430 EABI
Patch by Kristina Bessonova! Differential Revision: https://reviews.llvm.org/D57015 llvm-svn: 352177
-rw-r--r--clang/lib/Basic/Targets/MSP430.h6
-rw-r--r--clang/test/CodeGen/msp430-align.c23
-rw-r--r--clang/test/Preprocessor/init.c2
3 files changed, 30 insertions, 1 deletions
diff --git a/clang/lib/Basic/Targets/MSP430.h b/clang/lib/Basic/Targets/MSP430.h
index 185a537638e..620f12d2b8e 100644
--- a/clang/lib/Basic/Targets/MSP430.h
+++ b/clang/lib/Basic/Targets/MSP430.h
@@ -33,6 +33,10 @@ public:
LongWidth = 32;
LongLongWidth = 64;
LongAlign = LongLongAlign = 16;
+ FloatWidth = 32;
+ FloatAlign = 16;
+ DoubleWidth = LongDoubleWidth = 64;
+ DoubleAlign = LongDoubleAlign = 16;
PointerWidth = 16;
PointerAlign = 16;
SuitableAlign = 16;
@@ -51,6 +55,8 @@ public:
return None;
}
+ bool allowsLargerPreferedTypeAlignment() const override { return false; }
+
bool hasFeature(StringRef Feature) const override {
return Feature == "msp430";
}
diff --git a/clang/test/CodeGen/msp430-align.c b/clang/test/CodeGen/msp430-align.c
new file mode 100644
index 00000000000..72de87b3bbd
--- /dev/null
+++ b/clang/test/CodeGen/msp430-align.c
@@ -0,0 +1,23 @@
+// RUN: %clang_cc1 -triple msp430-elf -emit-llvm %s -o - | FileCheck %s
+
+// MSP430 target prefers chars to be aligned to 8 bit and other types to 16 bit.
+
+// CHECK: @c ={{.*}}global i8 1, align 1
+// CHECK: @s ={{.*}}global i16 266, align 2
+// CHECK: @i ={{.*}}global i16 266, align 2
+// CHECK: @l ={{.*}}global i32 16909060, align 2
+// CHECK: @ll ={{.*}}global i64 283686952306183, align 2
+// CHECK: @f ={{.*}}global float 1.000000e+00, align 2
+// CHECK: @d ={{.*}}global double 1.000000e+00, align 2
+// CHECK: @ld ={{.*}}global double 1.000000e+00, align 2
+// CHECK: @p ={{.*}}global i8* @c, align 2
+
+char c = 1;
+short s = 266;
+int i = 266;
+long l = 16909060;
+long long ll = 283686952306183;
+float f = 1.0f;
+double d = 1.0;
+long double ld = 1.0;
+char *p = &c;
diff --git a/clang/test/Preprocessor/init.c b/clang/test/Preprocessor/init.c
index fc8692b5221..366dc96aa51 100644
--- a/clang/test/Preprocessor/init.c
+++ b/clang/test/Preprocessor/init.c
@@ -5158,7 +5158,7 @@
// MSP430:#define __SIZE_MAX__ 65535U
// MSP430:#define __SIZE_TYPE__ unsigned int
// MSP430:#define __SIZE_WIDTH__ 16
-// MSP430-CXX:#define __STDCPP_DEFAULT_NEW_ALIGNMENT__ 8U
+// MSP430-CXX:#define __STDCPP_DEFAULT_NEW_ALIGNMENT__ 2U
// MSP430:#define __UINT16_C_SUFFIX__ U
// MSP430:#define __UINT16_MAX__ 65535U
// MSP430:#define __UINT16_TYPE__ unsigned short
OpenPOWER on IntegriCloud