[LLVMdev] Backend optimizations (original) (raw)
mats petersson mats at planetcatfish.com
Mon Jan 26 06🔞21 PST 2015
- Previous message: [LLVMdev] Backend optimizations
- Next message: [LLVMdev] Backend optimizations
- Messages sorted by: [ date ] [ thread ] [ subject ] [ author ]
From the department of ignorance and stupid suggestions: Run this conversion after other passes that deal with call instructions?
Side question: Is this targeting some unusual x86 architecture, as I believe this would be quite detrimental to performance on modern CPUs, as they use the pair of call/return to do predictive execution, so if you remove the CALL, the return will "unbalance" the call stack management, and lead to slower execution.
-- Mats
On 26 January 2015 at 13:21, Rinaldini Julien <julien.rinaldini at heig-vd.ch> wrote:
Hi,
I'm writting an intrinsics for the X86 plateform that replace every 'call' instruction by a 'push retaddr' followed by a 'jmp funcaddr'. I'm doing this in the X86ISelLowering class with a custom inserter. So if I have something like this: 0x0 call foobar 0x1 ... the call will be replaced like this: 0x0 push 0x2 0x1 jmp foobaraddr 0x2 ... This works fine in -O0, but when I try to compile in -O1,2,3, my program fails. Since there is no more 'call' instruction, the optimizations in the backend remove the operation that manage the function's arguments (I guess it thinks the arguments are not needed anymore). How can I resolve this problem? Is there a specific pass that remove unused values that I can disabled? Cheers
LLVM Developers mailing list LLVMdev at cs.uiuc.edu http://llvm.cs.uiuc.edu http://lists.cs.uiuc.edu/mailman/listinfo/llvmdev
- Previous message: [LLVMdev] Backend optimizations
- Next message: [LLVMdev] Backend optimizations
- Messages sorted by: [ date ] [ thread ] [ subject ] [ author ]