diff options
author | Sunil Srivastava <sunil_srivastava@playstation.sony.com> | 2016-02-05 20:50:02 +0000 |
---|---|---|
committer | Sunil Srivastava <sunil_srivastava@playstation.sony.com> | 2016-02-05 20:50:02 +0000 |
commit | 0ce2f227e83bb46da47921165792eaa26002a9e9 (patch) | |
tree | 4c0349fab2cfa069e223914873a5f3c3212c2ff3 /clang/lib | |
parent | 00ab73dcb0d602608a0851bb61aa378ef5ed3215 (diff) | |
download | bcm5719-llvm-0ce2f227e83bb46da47921165792eaa26002a9e9.tar.gz bcm5719-llvm-0ce2f227e83bb46da47921165792eaa26002a9e9.zip |
Do not honor explicit alignment attribute on fields for PS4.
This change reverts r257462 for PS4 triple.
Differential Revision: http://reviews.llvm.org/D16788
llvm-svn: 259916
Diffstat (limited to 'clang/lib')
-rw-r--r-- | clang/lib/AST/RecordLayoutBuilder.cpp | 6 | ||||
-rw-r--r-- | clang/lib/Basic/TargetInfo.cpp | 1 | ||||
-rw-r--r-- | clang/lib/Basic/Targets.cpp | 4 |
3 files changed, 9 insertions, 2 deletions
diff --git a/clang/lib/AST/RecordLayoutBuilder.cpp b/clang/lib/AST/RecordLayoutBuilder.cpp index 0572ff6b134..b8891cb388e 100644 --- a/clang/lib/AST/RecordLayoutBuilder.cpp +++ b/clang/lib/AST/RecordLayoutBuilder.cpp @@ -1600,7 +1600,8 @@ void ItaniumRecordLayoutBuilder::LayoutBitField(const FieldDecl *D) { (AllowPadding && (FieldOffset & (FieldAlign-1)) + FieldSize > TypeSize)) { FieldOffset = llvm::alignTo(FieldOffset, FieldAlign); - } else if (ExplicitFieldAlign) { + } else if (ExplicitFieldAlign && + Context.getTargetInfo().useExplicitBitFieldAlignment()) { // TODO: figure it out what needs to be done on targets that don't honor // bit-field type alignment like ARM APCS ABI. FieldOffset = llvm::alignTo(FieldOffset, ExplicitFieldAlign); @@ -1612,7 +1613,8 @@ void ItaniumRecordLayoutBuilder::LayoutBitField(const FieldDecl *D) { (UnpackedFieldOffset & (UnpackedFieldAlign-1)) + FieldSize > TypeSize)) UnpackedFieldOffset = llvm::alignTo(UnpackedFieldOffset, UnpackedFieldAlign); - else if (ExplicitFieldAlign) + else if (ExplicitFieldAlign && + Context.getTargetInfo().useExplicitBitFieldAlignment()) UnpackedFieldOffset = llvm::alignTo(UnpackedFieldOffset, ExplicitFieldAlign); } diff --git a/clang/lib/Basic/TargetInfo.cpp b/clang/lib/Basic/TargetInfo.cpp index 1648a27d8b3..4a2341e565e 100644 --- a/clang/lib/Basic/TargetInfo.cpp +++ b/clang/lib/Basic/TargetInfo.cpp @@ -66,6 +66,7 @@ TargetInfo::TargetInfo(const llvm::Triple &T) : TargetOpts(), Triple(T) { UseSignedCharForObjCBool = true; UseBitFieldTypeAlignment = true; UseZeroLengthBitfieldAlignment = false; + UseExplicitBitFieldAlignment = true; ZeroLengthBitfieldBoundary = 0; HalfFormat = &llvm::APFloat::IEEEhalf; FloatFormat = &llvm::APFloat::IEEEsingle; diff --git a/clang/lib/Basic/Targets.cpp b/clang/lib/Basic/Targets.cpp index 1c05eeef841..cbbf51be18e 100644 --- a/clang/lib/Basic/Targets.cpp +++ b/clang/lib/Basic/Targets.cpp @@ -606,6 +606,10 @@ public: this->MaxTLSAlign = 256; this->UserLabelPrefix = ""; + // On PS4, do not honor explicit bit field alignment, + // as in "__attribute__((aligned(2))) int b : 1;". + this->UseExplicitBitFieldAlignment = false; + switch (Triple.getArch()) { default: case llvm::Triple::x86_64: |