diff options
author | Anton Korobeynikov <anton@korobeynikov.info> | 2019-01-25 08:51:53 +0000 |
---|---|---|
committer | Anton Korobeynikov <anton@korobeynikov.info> | 2019-01-25 08:51:53 +0000 |
commit | 58f6bc509b365aa8516acc03c85b5d0712cf4af6 (patch) | |
tree | 73827d51d892743b340c7cc4896897e404d27df2 | |
parent | 6f2a0c682736dce8bef979a81a2b2b79a33f1c4e (diff) | |
download | bcm5719-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.h | 6 | ||||
-rw-r--r-- | clang/test/CodeGen/msp430-align.c | 23 | ||||
-rw-r--r-- | clang/test/Preprocessor/init.c | 2 |
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 |