The code was previously not able to trace a boolean argument at a call site back to the formal argument of the caller.
Details
Diff Detail
Event Timeline
lib/Target/X86/X86ISelLowering.cpp | ||
---|---|---|
3666 | Maybe a do { ... } while (false) loop is appropriate here? | |
test/CodeGen/X86/tail-call-bools.ll | ||
1 | Can you also run this in x86_64? The f_i32 guy will have to do movss %rcx, %xmm0 or something. Also, maybe tail-call-casts.ll is a better name for the test, since it's not all about bools. |
lib/Target/X86/X86ISelLowering.cpp | ||
---|---|---|
3666 | But then continue won't work? | |
test/CodeGen/X86/tail-call-bools.ll | ||
1 | My change doesn't affect tail call arguments passed in registers, so is mostly not relevant for x86_64. I do want to look into x86_64 in a follow-up though. For bools, we currently generate: movzbl %dil, %edi jmp g_bool i.e. we do make the tail call, but we don't recognize that the argument can be forwarded as-is. The float bitcast test will come in handy to check that we don't mess that up. I've renamed the test case. |
Maybe a do { ... } while (false) loop is appropriate here?