Thanks Tim! :) -eric
On Tue, Oct 14, 2014 at 3:12 PM, Tim Northover <[email protected]> wrote: > Author: tnorthover > Date: Tue Oct 14 17:12:21 2014 > New Revision: 219735 > > URL: http://llvm.org/viewvc/llvm-project?rev=219735&view=rev > Log: > ARM: remove ARM/Thumb distinction for preferred alignment. > > Thumb1 has legitimate reasons for preferring 32-bit alignment of types > i1/i8/i16, since the 16-bit encoding of "add rD, sp, #imm" requires #imm to be > a multiple of 4. However, this is a trade-off betweem code size and RAM usage; > the DataLayout string is not the best place to represent it even if desired. > > So this patch removes the extra Thumb requirements, hopefully making ARM and > Thumb completely compatible in this respect. > > Modified: > cfe/trunk/lib/Basic/Targets.cpp > cfe/trunk/test/CodeGen/target-data.c > > Modified: cfe/trunk/lib/Basic/Targets.cpp > URL: > http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Basic/Targets.cpp?rev=219735&r1=219734&r2=219735&view=diff > ============================================================================== > --- cfe/trunk/lib/Basic/Targets.cpp (original) > +++ cfe/trunk/lib/Basic/Targets.cpp Tue Oct 14 17:12:21 2014 > @@ -3728,42 +3728,27 @@ class ARMTargetInfo : public TargetInfo > > ZeroLengthBitfieldBoundary = 0; > > - if (IsThumb) { > - // Thumb1 add sp, #imm requires the immediate value be multiple of 4, > - // so set preferred for small types to 32. > - if (T.isOSBinFormatMachO()) { > - DescriptionString = BigEndian ? > - > "E-m:o-p:32:32-i1:8:32-i8:8:32-i16:16:32-i64:64-" > - "v128:64:128-a:0:32-n32-S64" : > - > "e-m:o-p:32:32-i1:8:32-i8:8:32-i16:16:32-i64:64-" > - "v128:64:128-a:0:32-n32-S64"; > - } else if (T.isOSWindows()) { > - // FIXME: this is invalid for WindowsCE > - assert(!BigEndian && "Windows on ARM does not support big endian"); > - DescriptionString = "e" > - "-m:e" > - "-p:32:32" > - "-i1:8:32-i8:8:32-i16:16:32-i64:64" > - "-v128:64:128" > - "-a:0:32" > - "-n32" > - "-S64"; > - } else { > - DescriptionString = BigEndian ? > - > "E-m:e-p:32:32-i1:8:32-i8:8:32-i16:16:32-i64:64-" > - "v128:64:128-a:0:32-n32-S64" : > - > "e-m:e-p:32:32-i1:8:32-i8:8:32-i16:16:32-i64:64-" > - "v128:64:128-a:0:32-n32-S64"; > - } > + // Thumb1 add sp, #imm requires the immediate value be multiple of 4, > + // so set preferred for small types to 32. > + if (T.isOSBinFormatMachO()) { > + DescriptionString = > + BigEndian ? "E-m:o-p:32:32-i64:64-v128:64:128-a:0:32-n32-S64" > + : "e-m:o-p:32:32-i64:64-v128:64:128-a:0:32-n32-S64"; > + } else if (T.isOSWindows()) { > + // FIXME: this is invalid for WindowsCE > + assert(!BigEndian && "Windows on ARM does not support big endian"); > + DescriptionString = "e" > + "-m:e" > + "-p:32:32" > + "-i64:64" > + "-v128:64:128" > + "-a:0:32" > + "-n32" > + "-S64"; > } else { > - if (T.isOSBinFormatMachO()) > - DescriptionString = > - BigEndian ? "E-m:o-p:32:32-i64:64-v128:64:128-a:0:32-n32-S64" > - : "e-m:o-p:32:32-i64:64-v128:64:128-a:0:32-n32-S64"; > - else > - DescriptionString = > - BigEndian ? "E-m:e-p:32:32-i64:64-v128:64:128-a:0:32-n32-S64" > - : "e-m:e-p:32:32-i64:64-v128:64:128-a:0:32-n32-S64"; > + DescriptionString = > + BigEndian ? "E-m:e-p:32:32-i64:64-v128:64:128-a:0:32-n32-S64" > + : "e-m:e-p:32:32-i64:64-v128:64:128-a:0:32-n32-S64"; > } > > // FIXME: Enumerated types are variable width in straight AAPCS. > @@ -3794,31 +3779,16 @@ class ARMTargetInfo : public TargetInfo > /// gcc. > ZeroLengthBitfieldBoundary = 32; > > - if (IsThumb) { > - // Thumb1 add sp, #imm requires the immediate value be multiple of 4, > - // so set preferred for small types to 32. > - if (T.isOSBinFormatMachO()) > - DescriptionString = BigEndian ? > - "E-m:o-p:32:32-i1:8:32-i8:8:32-i16:16:32-f64:32:64" > - "-v64:32:64-v128:32:128-a:0:32-n32-S32" : > - "e-m:o-p:32:32-i1:8:32-i8:8:32-i16:16:32-f64:32:64" > - "-v64:32:64-v128:32:128-a:0:32-n32-S32"; > - else > - DescriptionString = BigEndian ? > - "E-m:e-p:32:32-i1:8:32-i8:8:32-i16:16:32-f64:32:64" > - "-v64:32:64-v128:32:128-a:0:32-n32-S32" : > - "e-m:e-p:32:32-i1:8:32-i8:8:32-i16:16:32-f64:32:64" > - "-v64:32:64-v128:32:128-a:0:32-n32-S32"; > - } else { > - if (T.isOSBinFormatMachO()) > - DescriptionString = BigEndian ? > - "E-m:o-p:32:32-f64:32:64-v64:32:64-v128:32:128-a:0:32-n32-S32" : > - "e-m:o-p:32:32-f64:32:64-v64:32:64-v128:32:128-a:0:32-n32-S32"; > - else > - DescriptionString = BigEndian ? > - "E-m:e-p:32:32-f64:32:64-v64:32:64-v128:32:128-a:0:32-n32-S32" : > - "e-m:e-p:32:32-f64:32:64-v64:32:64-v128:32:128-a:0:32-n32-S32"; > - } > + if (T.isOSBinFormatMachO()) > + DescriptionString = > + BigEndian > + ? > "E-m:o-p:32:32-f64:32:64-v64:32:64-v128:32:128-a:0:32-n32-S32" > + : > "e-m:o-p:32:32-f64:32:64-v64:32:64-v128:32:128-a:0:32-n32-S32"; > + else > + DescriptionString = > + BigEndian > + ? > "E-m:e-p:32:32-f64:32:64-v64:32:64-v128:32:128-a:0:32-n32-S32" > + : > "e-m:e-p:32:32-f64:32:64-v64:32:64-v128:32:128-a:0:32-n32-S32"; > > // FIXME: Override "preferred align" for double and long long. > } > > Modified: cfe/trunk/test/CodeGen/target-data.c > URL: > http://llvm.org/viewvc/llvm-project/cfe/trunk/test/CodeGen/target-data.c?rev=219735&r1=219734&r2=219735&view=diff > ============================================================================== > --- cfe/trunk/test/CodeGen/target-data.c (original) > +++ cfe/trunk/test/CodeGen/target-data.c Tue Oct 14 17:12:21 2014 > @@ -128,7 +128,7 @@ > > // RUN: %clang_cc1 -triple thumb-unknown-gnueabi -o - -emit-llvm %s | \ > // RUN: FileCheck %s -check-prefix=THUMB > -// THUMB: target datalayout = > "e-m:e-p:32:32-i1:8:32-i8:8:32-i16:16:32-i64:64-v128:64:128-a:0:32-n32-S64" > +// THUMB: target datalayout = > "e-m:e-p:32:32-i64:64-v128:64:128-a:0:32-n32-S64" > > // RUN: %clang_cc1 -triple arm-unknown-gnueabi -o - -emit-llvm %s | \ > // RUN: FileCheck %s -check-prefix=ARM > @@ -136,7 +136,7 @@ > > // RUN: %clang_cc1 -triple thumb-unknown -o - -emit-llvm -target-abi > apcs-gnu \ > // RUN: %s | FileCheck %s -check-prefix=THUMB-GNU > -// THUMB-GNU: target datalayout = > "e-m:e-p:32:32-i1:8:32-i8:8:32-i16:16:32-f64:32:64-v64:32:64-v128:32:128-a:0:32-n32-S32" > +// THUMB-GNU: target datalayout = > "e-m:e-p:32:32-f64:32:64-v64:32:64-v128:32:128-a:0:32-n32-S32" > > // RUN: %clang_cc1 -triple arm-unknown -o - -emit-llvm -target-abi apcs-gnu \ > // RUN: %s | FileCheck %s -check-prefix=ARM-GNU > > > _______________________________________________ > cfe-commits mailing list > [email protected] > http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits _______________________________________________ cfe-commits mailing list [email protected] http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits
