diff options
| author | Jakob Stoklund Olesen <stoklund@2pi.dk> | 2011-06-27 04:08:33 +0000 |
|---|---|---|
| committer | Jakob Stoklund Olesen <stoklund@2pi.dk> | 2011-06-27 04:08:33 +0000 |
| commit | 537a302d1ae9ed81420ec3015699e556371c9579 (patch) | |
| tree | fbcedc84d83a1fc8faecd54e4bf37d309454a4ea /llvm/lib/Transforms/Utils/PromoteMemoryToRegister.cpp | |
| parent | 6b356b18b41172f6356c977c7bba4bf911280cae (diff) | |
| download | bcm5719-llvm-537a302d1ae9ed81420ec3015699e556371c9579.tar.gz bcm5719-llvm-537a302d1ae9ed81420ec3015699e556371c9579.zip | |
Distinguish early clobber output operands from clobbered registers.
Both become <earlyclobber> defs on the INLINEASM MachineInstr, but we
now use two different asm operand kinds.
The new Kind_Clobber is treated identically to the old
Kind_RegDefEarlyClobber for now, but x87 floating point stack inline
assembly does care about the difference.
This will pop a register off the stack:
asm("fstp %st" : : "t"(x) : "st");
While this will pop the input and push an output:
asm("fst %st" : "=&t"(r) : "t"(x));
We need to know if ST0 was a clobber or an output operand, and we can't
depend on <dead> flags for that.
llvm-svn: 133902
Diffstat (limited to 'llvm/lib/Transforms/Utils/PromoteMemoryToRegister.cpp')
0 files changed, 0 insertions, 0 deletions

