Skip to content
  • Jakob Stoklund Olesen's avatar
    Distinguish early clobber output operands from clobbered registers. · 537a302d
    Jakob Stoklund Olesen authored
    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
    537a302d
Loading