On X86, MEMBARRIER, MFENCE, SFENCE, LFENCE are not target memory intrinsics,

so don't claim they are.  They are allocated using DAG.getNode, so attempts
to access MemSDNode fields results in reading off the end of the allocated
memory.  This fixes crashes with "llc -debug" due to debug code trying to
print MemSDNode fields for these barrier nodes (since the crashes are not
deterministic, use valgrind to see this).  Add some nasty checking to try
to catch this kind of thing in the future.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@119901 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
Duncan Sands
2010-11-20 11:25:00 +00:00
parent b9e6fe1e3a
commit 59d2dad59e
3 changed files with 52 additions and 18 deletions

View File

@@ -256,6 +256,12 @@ namespace llvm {
// WIN_ALLOCA - Windows's _chkstk call to do stack probing.
WIN_ALLOCA,
// Memory barrier
MEMBARRIER,
MFENCE,
SFENCE,
LFENCE,
// ATOMADD64_DAG, ATOMSUB64_DAG, ATOMOR64_DAG, ATOMAND64_DAG,
// ATOMXOR64_DAG, ATOMNAND64_DAG, ATOMSWAP64_DAG -
// Atomic 64-bit binary operations.
@@ -267,12 +273,6 @@ namespace llvm {
ATOMNAND64_DAG,
ATOMSWAP64_DAG,
// Memory barrier
MEMBARRIER,
MFENCE,
SFENCE,
LFENCE,
// LCMPXCHG_DAG, LCMPXCHG8_DAG - Compare and swap.
LCMPXCHG_DAG,
LCMPXCHG8_DAG,