[llvm] r275451 - [CodeGen] Refactor MachineMemOperand::Flags's target-specific flags.
Justin Lebar via llvm-commits
llvm-commits at lists.llvm.org
Thu Jul 14 13:16:24 PDT 2016
Committed r275463. Sorry about that.
I guess I will update my personal linter to try to catch additions of constexpr.
On Thu, Jul 14, 2016 at 1:11 PM, Justin Lebar <jlebar at google.com> wrote:
> Because I used "constexpr" again. This is like the third time in a
> week. :-/ Although interestingly I haven't seen emails from the
> buildbots yet.
>
> On Thu, Jul 14, 2016 at 1:10 PM, Kostya Serebryany <kcc at google.com> wrote:
>> Looks like it broke the windows build.
>>
>> C:\b\slave\sanitizer-windows\llvm\lib\Target\AArch64\AArch64InstrInfo.cpp(32)
>> : error C2143: syntax error : missing ';' before
>> 'llvm::MachineMemOperand::Flags'
>> C:\b\slave\sanitizer-windows\llvm\lib\Target\AArch64\AArch64InstrInfo.cpp(32)
>> : error C4430: missing type specifier - int assumed. Note: C++ does not
>> support default-int
>>
>>
>> On Thu, Jul 14, 2016 at 11:15 AM, Justin Lebar via llvm-commits
>> <llvm-commits at lists.llvm.org> wrote:
>>>
>>> Author: jlebar
>>> Date: Thu Jul 14 13:15:20 2016
>>> New Revision: 275451
>>>
>>> URL: http://llvm.org/viewvc/llvm-project?rev=275451&view=rev
>>> Log:
>>> [CodeGen] Refactor MachineMemOperand::Flags's target-specific flags.
>>>
>>> Summary:
>>> Make the target-specific flags in MachineMemOperand::Flags real, bona
>>> fide enum values. This simplifies users, prevents various constants
>>> from going out of sync, and avoids the false sense of security provided
>>> by declaring static members in classes and then forgetting to define
>>> them inside of cpp files.
>>>
>>> Reviewers: MatzeB
>>>
>>> Subscribers: llvm-commits
>>>
>>> Differential Revision: https://reviews.llvm.org/D22372
>>>
>>> Modified:
>>> llvm/trunk/include/llvm/CodeGen/MachineMemOperand.h
>>> llvm/trunk/lib/CodeGen/MachineInstr.cpp
>>> llvm/trunk/lib/Target/AArch64/AArch64InstrInfo.cpp
>>> llvm/trunk/lib/Target/AArch64/AArch64InstrInfo.h
>>>
>>> Modified: llvm/trunk/include/llvm/CodeGen/MachineMemOperand.h
>>> URL:
>>> http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/CodeGen/MachineMemOperand.h?rev=275451&r1=275450&r2=275451&view=diff
>>>
>>> ==============================================================================
>>> --- llvm/trunk/include/llvm/CodeGen/MachineMemOperand.h (original)
>>> +++ llvm/trunk/include/llvm/CodeGen/MachineMemOperand.h Thu Jul 14
>>> 13:15:20 2016
>>> @@ -89,32 +89,27 @@ struct MachinePointerInfo {
>>> ///
>>> class MachineMemOperand {
>>> public:
>>> - // This is the number of bits we need to represent flags.
>>> - static LLVM_CONSTEXPR unsigned MOMaxBits = 8;
>>> -
>>> - // Target hints allow target passes to annotate memory operations.
>>> - static LLVM_CONSTEXPR unsigned MOTargetStartBit = 5;
>>> - static LLVM_CONSTEXPR unsigned MOTargetNumBits = 3;
>>> -
>>> /// Flags values. These may be or'd together.
>>> enum Flags : uint16_t {
>>> // No flags set.
>>> MONone = 0,
>>> /// The memory access reads data.
>>> - MOLoad = 1,
>>> + MOLoad = 1u << 0,
>>> /// The memory access writes data.
>>> - MOStore = 2,
>>> + MOStore = 1u << 1,
>>> /// The memory access is volatile.
>>> - MOVolatile = 4,
>>> + MOVolatile = 1u << 2,
>>> /// The memory access is non-temporal.
>>> - MONonTemporal = 8,
>>> + MONonTemporal = 1u << 3,
>>> /// The memory access is invariant.
>>> - MOInvariant = 16,
>>> + MOInvariant = 1u << 4,
>>>
>>> - // Maximum MemOperandFlag value (inclusive).
>>> - MOMaxFlag = (1 << MOMaxBits) - 1,
>>> + // Reserved for use by target-specific passes.
>>> + MOTargetFlag1 = 1u << 5,
>>> + MOTargetFlag2 = 1u << 6,
>>> + MOTargetFlag3 = 1u << 7,
>>>
>>> - LLVM_MARK_AS_BITMASK_ENUM(MOMaxFlag)
>>> + LLVM_MARK_AS_BITMASK_ENUM(/* LargestFlag = */ MOTargetFlag3)
>>> };
>>>
>>> private:
>>>
>>> Modified: llvm/trunk/lib/CodeGen/MachineInstr.cpp
>>> URL:
>>> http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/CodeGen/MachineInstr.cpp?rev=275451&r1=275450&r2=275451&view=diff
>>>
>>> ==============================================================================
>>> --- llvm/trunk/lib/CodeGen/MachineInstr.cpp (original)
>>> +++ llvm/trunk/lib/CodeGen/MachineInstr.cpp Thu Jul 14 13:15:20 2016
>>> @@ -503,8 +503,6 @@ MachineMemOperand::MachineMemOperand(Mac
>>> const MDNode *Ranges)
>>> : PtrInfo(ptrinfo), Size(s), FlagVals(f), BaseAlignLog2(Log2_32(a) +
>>> 1),
>>> AAInfo(AAInfo), Ranges(Ranges) {
>>> - assert(MOMaxFlag == (1 << MOMaxBits) - 1 &&
>>> - "MOMaxFlag and MOMaxBits have fallen out of sync.");
>>> assert((PtrInfo.V.isNull() || PtrInfo.V.is<const PseudoSourceValue*>()
>>> ||
>>> isa<PointerType>(PtrInfo.V.get<const Value*>()->getType())) &&
>>> "invalid pointer value");
>>>
>>> Modified: llvm/trunk/lib/Target/AArch64/AArch64InstrInfo.cpp
>>> URL:
>>> http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/AArch64/AArch64InstrInfo.cpp?rev=275451&r1=275450&r2=275451&view=diff
>>>
>>> ==============================================================================
>>> --- llvm/trunk/lib/Target/AArch64/AArch64InstrInfo.cpp (original)
>>> +++ llvm/trunk/lib/Target/AArch64/AArch64InstrInfo.cpp Thu Jul 14 13:15:20
>>> 2016
>>> @@ -29,6 +29,9 @@ using namespace llvm;
>>> #define GET_INSTRINFO_CTOR_DTOR
>>> #include "AArch64GenInstrInfo.inc"
>>>
>>> +static constexpr MachineMemOperand::Flags MOSuppressPair =
>>> + MachineMemOperand::MOTargetFlag1;
>>> +
>>> AArch64InstrInfo::AArch64InstrInfo(const AArch64Subtarget &STI)
>>> : AArch64GenInstrInfo(AArch64::ADJCALLSTACKDOWN,
>>> AArch64::ADJCALLSTACKUP),
>>> RI(STI.getTargetTriple()), Subtarget(STI) {}
>>> @@ -1449,27 +1452,16 @@ bool AArch64InstrInfo::isScaledAddr(cons
>>>
>>> /// Check all MachineMemOperands for a hint to suppress pairing.
>>> bool AArch64InstrInfo::isLdStPairSuppressed(const MachineInstr &MI) const
>>> {
>>> - static_assert(MOSuppressPair < (1 <<
>>> MachineMemOperand::MOTargetNumBits),
>>> - "Too many target MO flags");
>>> - for (auto *MM : MI.memoperands()) {
>>> - if (MM->getFlags() &
>>> - (MOSuppressPair << MachineMemOperand::MOTargetStartBit)) {
>>> - return true;
>>> - }
>>> - }
>>> - return false;
>>> + return any_of(MI.memoperands(), [](MachineMemOperand *MMO) {
>>> + return MMO->getFlags() & MOSuppressPair;
>>> + });
>>> }
>>>
>>> /// Set a flag on the first MachineMemOperand to suppress pairing.
>>> void AArch64InstrInfo::suppressLdStPair(MachineInstr &MI) const {
>>> if (MI.memoperands_empty())
>>> return;
>>> -
>>> - static_assert(MOSuppressPair < (1 <<
>>> MachineMemOperand::MOTargetNumBits),
>>> - "Too many target MO flags");
>>> - (*MI.memoperands_begin())
>>> - ->setFlags(static_cast<MachineMemOperand::Flags>(
>>> - MOSuppressPair << MachineMemOperand::MOTargetStartBit));
>>> + (*MI.memoperands_begin())->setFlags(MOSuppressPair);
>>> }
>>>
>>> bool AArch64InstrInfo::isUnscaledLdSt(unsigned Opc) const {
>>>
>>> Modified: llvm/trunk/lib/Target/AArch64/AArch64InstrInfo.h
>>> URL:
>>> http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/AArch64/AArch64InstrInfo.h?rev=275451&r1=275450&r2=275451&view=diff
>>>
>>> ==============================================================================
>>> --- llvm/trunk/lib/Target/AArch64/AArch64InstrInfo.h (original)
>>> +++ llvm/trunk/lib/Target/AArch64/AArch64InstrInfo.h Thu Jul 14 13:15:20
>>> 2016
>>> @@ -28,12 +28,6 @@ class AArch64Subtarget;
>>> class AArch64TargetMachine;
>>>
>>> class AArch64InstrInfo : public AArch64GenInstrInfo {
>>> - // Reserve bits in the MachineMemOperand target hint flags, starting at
>>> 1.
>>> - // They will be shifted into MOTargetHintStart when accessed.
>>> - enum TargetMemOperandFlags {
>>> - MOSuppressPair = 1
>>> - };
>>> -
>>> const AArch64RegisterInfo RI;
>>> const AArch64Subtarget &Subtarget;
>>>
>>>
>>>
>>> _______________________________________________
>>> llvm-commits mailing list
>>> llvm-commits at lists.llvm.org
>>> http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-commits
>>
>>
More information about the llvm-commits
mailing list