A codegen approach
Details
Diff Detail
- Repository
- rL LLVM
Event Timeline
It's basically like my solution: Ensure that TempScopInfo generates write accesses and that BlockGenerators adds the PHIs to EscapeMap.
lib/Analysis/TempScopInfo.cpp | ||
---|---|---|
114 ↗ | (On Diff #32218) | What happens otherwise? |
470 ↗ | (On Diff #32218) | if (!R.getExitingBlock()) |
lib/CodeGen/BlockGenerators.cpp | ||
495 ↗ | (On Diff #32218) | assert(!OperandPHI) |
499 ↗ | (On Diff #32218) | assert(OperandPHI); |
532 ↗ | (On Diff #32218) | Is this necessary? Can't one just use the original PHI to represent the virtual memory location? It's not directly used anyway. |
543 ↗ | (On Diff #32218) | escape |
1202 ↗ | (On Diff #32218) | The last 30 lines are repetative. Refactor? |
I will push another version later.
The problematic part I encountered are PHI nodes that use values as operands. Here I tried to circumvent them by looking through the new PHI node in the exit and replacing it dynamically with the one that is now in the region [BlockGenerators.cpp:529]. However, I don't like this solution so I came up with a different one I will push here.
lib/Analysis/TempScopInfo.cpp | ||
---|---|---|
114 ↗ | (On Diff #32218) | The PHI operands are not modeled, hence never stored into the escape location. |
470 ↗ | (On Diff #32218) | True. |
lib/CodeGen/BlockGenerators.cpp | ||
532 ↗ | (On Diff #32218) | I don't think so as it is linked via the escape map to the rewiring at the end. |
1202 ↗ | (On Diff #32218) | That might be an idea for a different patch though. |
- Remove trivial condition
- Allow values to cause memory accesses
- Allow PHI nodes in the region exit block
This patch fails only the pairalign lnt execution test.
@Meinersbur Does your patch pass that one? If so can you rebase your patch to the upstram I want to see the difference in the generated L__align11 function that is apperently wrong.