1
0
mirror of https://github.com/RPCS3/llvm-mirror.git synced 2024-10-22 04:22:57 +02:00
llvm-mirror/include/llvm/CodeGen
Reid Kleckner 26454793b1 Fix miscompile of MS inline assembly with stack realignment
For stack frames requiring realignment, three pointers may be needed:
- ebp to address incoming arguments
- esi (could be any callee-saved register) to address locals
- esp to address outgoing arguments

We would use esi unconditionally without verifying that it did not
conflict with inline assembly.

This change doesn't do the verification, it simply emits a fatal error
on functions that use stack realignment, dynamic SP adjustments, and
inline assembly.

Because stack realignment is common on Windows, we also no longer assume
that MS inline assembly clobbers esp.  Instead, we analyze the inline
instructions for implicit definitions and check if esp is there.  If so,
we require the use of a base pointer and consider it in the condition
above.

Mostly fixes PR16830, but we could try harder to find a non-conflicting
base pointer.

Reviewers: sunfish

Differential Revision: http://llvm-reviews.chandlerc.com/D1317

llvm-svn: 196876
2013-12-10 05:12:23 +00:00
..
PBQP Dereference the node iterator when dumping the PBQP graph structure in DOT 2013-11-21 06:30:14 +00:00
Analysis.h [stackprotector] Refactor out the end of isInTailCallPosition into the function returnTypeIsEligibleForTailCall. 2013-08-20 08:36:50 +00:00
AsmPrinter.h Reland 196270 "Generalize debug info / EH emission in AsmPrinter" 2013-12-03 15:10:23 +00:00
CalcSpillWeights.h CalcSpillWeights: allow overidding the spill weight normalizing function 2013-11-11 19:56:14 +00:00
CallingConvLower.h Use SmallVectorImpl& instead of SmallVector to avoid repeating small vector size. 2013-07-14 04:42:23 +00:00
CommandFlags.h Speling fixes. 2013-10-22 15:18:03 +00:00
DAGCombine.h
DFAPacketizer.h
EdgeBundles.h
FastISel.h Avoid illegal integer promotion in fastisel 2013-11-15 19:09:27 +00:00
FunctionLoweringInfo.h Simplify landing pad lowering. 2013-07-04 04:53:45 +00:00
GCMetadata.h GCInfoDeleter code cleanup after r175528 2013-03-01 11:40:32 +00:00
GCMetadataPrinter.h
GCs.h Add a GC plugin for Erlang 2013-03-25 13:47:46 +00:00
GCStrategy.h
IntrinsicLowering.h
ISDOpcodes.h Add addrspacecast instruction. 2013-11-15 01:34:59 +00:00
JITCodeEmitter.h Simplify code. 2013-02-09 13:29:31 +00:00
LatencyPriorityQueue.h
LexicalScopes.h Remove capability for polymorphic destruction from LexicalScope 2013-11-20 00:54:28 +00:00
LinkAllAsmWriterComponents.h Add a GC plugin for Erlang 2013-03-25 13:47:46 +00:00
LinkAllCodegenComponents.h Add a GC plugin for Erlang 2013-03-25 13:47:46 +00:00
LiveInterval.h Replacing HUGE_VALF with llvm::huge_valf in order to work around a warning triggered in MSVC 12. 2013-11-13 00:15:44 +00:00
LiveIntervalAnalysis.h Represent RegUnit liveness with LiveRange instance 2013-10-10 21:29:02 +00:00
LiveIntervalUnion.h Rename LiveRange to LiveInterval::Segment 2013-10-10 21:28:43 +00:00
LiveRangeEdit.h Auto-compute live intervals on demand. 2013-08-14 23:50:16 +00:00
LiveRegMatrix.h
LiveRegUnits.h LiveRegUnits: Use *MBB for consistency and convenience. 2013-10-14 22:18:59 +00:00
LiveStackAnalysis.h
LiveVariables.h Use SmallVectorImpl& instead of SmallVector to avoid repeating small vector size. 2013-07-11 16:22:38 +00:00
MachineBasicBlock.h Even more spelling fixes for "instruction". 2013-09-28 13:42:22 +00:00
MachineBlockFrequencyInfo.h Added MachineBlockFrequencyInfo::view for displaying the block frequency propagation graph via graphviz. 2013-12-03 00:49:33 +00:00
MachineBranchProbabilityInfo.h Add editor C++ filetype declaration no functionality change. 2013-08-12 21:10:23 +00:00
MachineCodeEmitter.h
MachineCodeInfo.h
MachineConstantPool.h Directly access objects which may change during compilation. 2013-06-17 20:41:25 +00:00
MachineDominators.h Add even more constatness in MachineDominators.h. 2013-02-16 12:36:32 +00:00
MachineFrameInfo.h Fix miscompile of MS inline assembly with stack realignment 2013-12-10 05:12:23 +00:00
MachineFunction.h Fix miscompile of MS inline assembly with stack realignment 2013-12-10 05:12:23 +00:00
MachineFunctionAnalysis.h Remove unneeded "TargetMachine.h" #includes. 2013-02-09 20:54:05 +00:00
MachineFunctionPass.h
MachineInstr.h Rename parameter: defined regs are not incoming. 2013-10-10 21:28:38 +00:00
MachineInstrBuilder.h Reapply an improved version of r180816/180817. 2013-07-09 20:28:37 +00:00
MachineInstrBundle.h
MachineJumpTableInfo.h
MachineLoopInfo.h Don't #include heavy Dominators.h file in LoopInfo.h. This change reduces 2013-12-07 21:20:17 +00:00
MachineMemOperand.h Add target flags to MachineMemOperands. 2013-04-27 03:54:17 +00:00
MachineModuleInfo.h Make a few more things const. 2013-08-15 20:25:44 +00:00
MachineModuleInfoImpls.h
MachineOperand.h Fix a typo where we were creating <def,kill> operands instead of 2013-11-22 00:46:32 +00:00
MachinePassRegistry.h
MachinePostDominators.h Remove unneeded #include. 2013-03-10 01:15:14 +00:00
MachineRegisterInfo.h [weak vtables] Remove a bunch of weak vtables 2013-11-19 00:57:56 +00:00
MachineRelocation.h [typo] An LLVM. 2013-08-16 23:30:19 +00:00
MachineScheduler.h Factor out the SchedRemainder/SchedBoundary from GenericScheduler strategy. 2013-12-07 05:59:44 +00:00
MachineSSAUpdater.h
MachineTraceMetrics.h Add ArrayRef constructor from None, and do the cleanups that this constructor enables 2013-05-05 00:40:33 +00:00
MachORelocation.h
Passes.h Move the old pass manager infrastructure into a legacy namespace and 2013-11-09 12:26:54 +00:00
PseudoSourceValue.h [typo] An LLVM. 2013-08-16 23:30:19 +00:00
RegAllocPBQP.h Re-apply r194300 with fixes for warnings. 2013-11-09 03:08:56 +00:00
RegAllocRegistry.h
RegisterClassInfo.h MI-Sched: Adjust regpressure limits for reserved regs. 2013-06-21 18:32:58 +00:00
RegisterPressure.h Represent RegUnit liveness with LiveRange instance 2013-10-10 21:29:02 +00:00
RegisterScavenging.h Use SmallVectorImpl::iterator/const_iterator instead of SmallVector 2013-07-03 05:01:24 +00:00
ResourcePriorityQueue.h
RuntimeLibcalls.h Fix filename in header comment 2013-11-16 15:40:54 +00:00
ScheduleDAG.h MI-Sched: Model "reserved" processor resources. 2013-12-05 17:56:02 +00:00
ScheduleDAGInstrs.h Correct word hyphenations 2013-12-05 05:44:44 +00:00
ScheduleDFS.h
ScheduleHazardRecognizer.h
SchedulerRegistry.h
ScoreboardHazardRecognizer.h
SelectionDAG.h Split SETCC if VSELECT requires splitting too. 2013-11-22 00:39:23 +00:00
SelectionDAGISel.h Add OPC_CheckChildSame0-3 to the DAG isel matcher. This replaces sequences of MoveChild, CheckSame, MoveParent. Saves 846 bytes from the X86 DAG isel matcher, ~300 from ARM, ~840 from Hexagon. 2013-10-05 05:38:16 +00:00
SelectionDAGNodes.h Add addrspacecast instruction. 2013-11-15 01:34:59 +00:00
SlotIndexes.h Down-scale slot index distance to save bits. 2013-07-30 19:59:19 +00:00
StackMaps.h Refactor a lot of patchpoint/stackmap related code to simplify and make it 2013-11-29 03:07:54 +00:00
StackProtector.h Reformat code with clang-format. 2013-10-30 02:25:14 +00:00
TargetLoweringObjectFileImpl.h PR16493: DebugInfo with TLS on PPC crashing due to invalid relocation 2013-07-01 21:45:25 +00:00
TargetSchedule.h Factor out the SchedRemainder/SchedBoundary from GenericScheduler strategy. 2013-12-07 05:59:44 +00:00
ValueTypes.h Implement AArch64 vector load/store multiple N-element structure class SIMD(lselem). 2013-10-10 17:00:52 +00:00
ValueTypes.td Implement aarch64 neon instruction set AdvSIMD (Across). 2013-10-05 08:22:10 +00:00
VirtRegMap.h