<div dir="ltr">Hello llvm-dev list,<br><br>i am implementing an X86 Machine Pass that at some point needs to push/pop eflags on the stack. This pass is hooked at preRegAlloc and LLVM is 3.7.0.<br>I got two big problems:<br>1) I didn't found a way to emit a pushfq instruction in a clean way, i.e. with   BuildMI(*MBB, MI, DL, TII.get(X86::PUSHF64)). Even if both EFLAGS and RSP are added to the MBB liveins, the Machine Verifier complains saying:<div><div>*** Bad machine code: Using an undefined physical register ***                                  </div><div>- function:    main                                                                                              </div><div>- basic block: BB#238 for.inc.121.4 (0x43133b0)</div><div>- instruction: PUSHF64- operand 2:   %EFLAGS<imp-use,kill>   <br><br>Anyway right now i'm able to push it via some "dirty" INLINE_ASM.<br><br>2) INLINE_ASM works pretty well, except in one randomly generated test case where the register allocator spills a register in between the pushfq/popfq, resulting in a crash of the compiled application. <br><br>So the question is: is there a recommended way to save and restore the value of eflags?<br><br>Any help is really appreciated! <br></div></div></div>