[llvm-commits] [llvm] r146026 - in /llvm/trunk: include/llvm/CodeGen/ include/llvm/MC/ lib/CodeGen/ lib/CodeGen/AsmPrinter/ lib/CodeGen/SelectionDAG/ lib/ExecutionEngine/JIT/ lib/Target/ lib/Target/ARM/ lib/Target/MBlaze/ lib/Target/MSP430/ lib/T
Evan Cheng
evan.cheng at apple.com
Thu Dec 8 22:45:31 PST 2011
On Dec 8, 2011, at 3:43 PM, Nick Lewycky wrote:
> On 6 December 2011 23:15, Evan Cheng <evan.cheng at apple.com> wrote:
>> Author: evancheng
>> Date: Wed Dec 7 01:15:52 2011
>> New Revision: 146026
>>
>> URL: http://llvm.org/viewvc/llvm-project?rev=146026&view=rev
>> Log:
>> Add bundle aware API for querying instruction properties and switch the code
>> generator to it. For non-bundle instructions, these behave exactly the same
>> as the MC layer API.
>>
>> For properties like mayLoad / mayStore, look into the bundle and if any of the
>> bundled instructions has the property it would return true.
>> For properties like isPredicable, only return true if *all* of the bundled
>> instructions have the property.
>> For properties like canFoldAsLoad, isCompare, conservatively return false for
>> bundles.
>>
>> Modified:
>> llvm/trunk/include/llvm/CodeGen/MachineInstr.h
>> llvm/trunk/include/llvm/MC/MCInstrDesc.h
>> llvm/trunk/lib/CodeGen/AggressiveAntiDepBreaker.cpp
>> llvm/trunk/lib/CodeGen/AsmPrinter/AsmPrinter.cpp
>> llvm/trunk/lib/CodeGen/AsmPrinter/DwarfException.cpp
>> llvm/trunk/lib/CodeGen/BranchFolding.cpp
>> llvm/trunk/lib/CodeGen/CriticalAntiDepBreaker.cpp
>> llvm/trunk/lib/CodeGen/DeadMachineInstructionElim.cpp
>> llvm/trunk/lib/CodeGen/ExecutionDepsFix.cpp
>> llvm/trunk/lib/CodeGen/ExpandISelPseudos.cpp
>> llvm/trunk/lib/CodeGen/ExpandPostRAPseudos.cpp
>> llvm/trunk/lib/CodeGen/GCStrategy.cpp
>> llvm/trunk/lib/CodeGen/IfConversion.cpp
>> llvm/trunk/lib/CodeGen/InlineSpiller.cpp
>> llvm/trunk/lib/CodeGen/LiveDebugVariables.cpp
>> llvm/trunk/lib/CodeGen/LiveIntervalAnalysis.cpp
>> llvm/trunk/lib/CodeGen/LiveRangeEdit.cpp
>> llvm/trunk/lib/CodeGen/LiveVariables.cpp
>> llvm/trunk/lib/CodeGen/MachineBasicBlock.cpp
>> llvm/trunk/lib/CodeGen/MachineCSE.cpp
>> llvm/trunk/lib/CodeGen/MachineInstr.cpp
>> llvm/trunk/lib/CodeGen/MachineLICM.cpp
>> llvm/trunk/lib/CodeGen/MachineSink.cpp
>> llvm/trunk/lib/CodeGen/MachineVerifier.cpp
>> llvm/trunk/lib/CodeGen/PeepholeOptimizer.cpp
>> llvm/trunk/lib/CodeGen/PostRASchedulerList.cpp
>> llvm/trunk/lib/CodeGen/PrologEpilogInserter.cpp
>> llvm/trunk/lib/CodeGen/RegAllocFast.cpp
>> llvm/trunk/lib/CodeGen/RegisterCoalescer.cpp
>> llvm/trunk/lib/CodeGen/ScheduleDAGInstrs.cpp
>> llvm/trunk/lib/CodeGen/SelectionDAG/InstrEmitter.cpp
>> llvm/trunk/lib/CodeGen/SelectionDAG/SelectionDAGISel.cpp
>> llvm/trunk/lib/CodeGen/ShrinkWrapping.cpp
>> llvm/trunk/lib/CodeGen/SplitKit.cpp
>> llvm/trunk/lib/CodeGen/TailDuplication.cpp
>> llvm/trunk/lib/CodeGen/TargetInstrInfoImpl.cpp
>> llvm/trunk/lib/CodeGen/TwoAddressInstructionPass.cpp
>> llvm/trunk/lib/ExecutionEngine/JIT/JITDwarfEmitter.cpp
>> llvm/trunk/lib/Target/ARM/ARMAsmPrinter.cpp
>> llvm/trunk/lib/Target/ARM/ARMBaseInstrInfo.cpp
>> llvm/trunk/lib/Target/ARM/ARMConstantIslandPass.cpp
>> llvm/trunk/lib/Target/ARM/ARMFastISel.cpp
>> llvm/trunk/lib/Target/ARM/ARMFrameLowering.cpp
>> llvm/trunk/lib/Target/ARM/ARMHazardRecognizer.cpp
>> llvm/trunk/lib/Target/ARM/ARMISelLowering.cpp
>> llvm/trunk/lib/Target/ARM/ARMLoadStoreOptimizer.cpp
>> llvm/trunk/lib/Target/ARM/MLxExpansionPass.cpp
>> llvm/trunk/lib/Target/ARM/Thumb1RegisterInfo.cpp
>> llvm/trunk/lib/Target/ARM/Thumb2ITBlockPass.cpp
>> llvm/trunk/lib/Target/ARM/Thumb2SizeReduction.cpp
>> llvm/trunk/lib/Target/MBlaze/MBlazeAsmPrinter.cpp
>> llvm/trunk/lib/Target/MBlaze/MBlazeDelaySlotFiller.cpp
>> llvm/trunk/lib/Target/MSP430/MSP430FrameLowering.cpp
>> llvm/trunk/lib/Target/MSP430/MSP430InstrInfo.cpp
>> llvm/trunk/lib/Target/Mips/MipsAsmPrinter.cpp
>> llvm/trunk/lib/Target/Mips/MipsCodeEmitter.cpp
>> llvm/trunk/lib/Target/Mips/MipsDelaySlotFiller.cpp
>> llvm/trunk/lib/Target/PTX/PTXInstrInfo.cpp
>> llvm/trunk/lib/Target/PowerPC/PPCFrameLowering.cpp
>> llvm/trunk/lib/Target/PowerPC/PPCISelDAGToDAG.cpp
>> llvm/trunk/lib/Target/Sparc/DelaySlotFiller.cpp
>> llvm/trunk/lib/Target/Sparc/SparcAsmPrinter.cpp
>> llvm/trunk/lib/Target/Sparc/SparcInstrInfo.cpp
>> llvm/trunk/lib/Target/TargetInstrInfo.cpp
>> llvm/trunk/lib/Target/X86/X86CodeEmitter.cpp
>> llvm/trunk/lib/Target/X86/X86FrameLowering.cpp
>> llvm/trunk/lib/Target/X86/X86InstrInfo.cpp
>> llvm/trunk/lib/Target/X86/X86RegisterInfo.cpp
>> llvm/trunk/lib/Target/X86/X86VZeroUpper.cpp
>>
>> Modified: llvm/trunk/include/llvm/CodeGen/MachineInstr.h
>> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/CodeGen/MachineInstr.h?rev=146026&r1=146025&r2=146026&view=diff
>> ==============================================================================
>> --- llvm/trunk/include/llvm/CodeGen/MachineInstr.h (original)
>> +++ llvm/trunk/include/llvm/CodeGen/MachineInstr.h Wed Dec 7 01:15:52 2011
>> @@ -274,14 +274,267 @@
>> return MemRefsEnd - MemRefs == 1;
>> }
>>
>> - /// API for querying MachineInstr properties. These are bundle aware.
>> + /// API for querying MachineInstr properties. They are the same as MCInstrDesc
>> + /// queries but they are bundle aware.
>> +
>> + /// hasProperty - Return true if the instruction (or in the case of a bundle,
>> + /// the instructions inside the bundle) has the specified property.
>> + /// The first argument is the property being queried.
>> + /// The second argument indicates whether the query should look inside
>> + /// instruction bundles.
>> + /// If the third argument is true, than the query can return true when *any*
>> + /// of the bundled instructions has the queried property. If it's false, then
>> + /// this can return true iff *all* of the instructions have the property.
>> + bool hasProperty(unsigned Flag,
>> + bool PeekInBundle = true, bool IsOr = true) const;
>
> This is implemented in lib/CodeGen/MachineInstr.cpp ...
>
>> + /// isBarrier - Returns true if the specified instruction stops control flow
>> + /// from executing the instruction immediately following it. Examples include
>> + /// unconditional branches and return instructions.
>> + bool isBarrier() const {
>> + return hasProperty(MCID::Barrier);
>> + }
>
> ... and this is called from lib/Target/TargetInstrInfo.cpp.
>
> You've created a new dependency from target upon codegen, but codegen
> already depends on Target. Please fix this dependency cycle!
Sigh. I keep on forgetting libTarget doesn't include the actual targets. This is hopefully fixed by r146247.
Evan
>
> Nick
More information about the llvm-commits
mailing list