This change creates UnrollVectorOp_StrictFP. The purpose of this is to address a failure that consistently occurs when calling StrictFP functions on vectors whose number of elements is 3 + 2n on most platforms, such as PowerPC or SystemZ. The old UnrollVectorOp method does not expect that the vector that it will unroll will have a chain, so it has an assert that prevents it from running if this is the case. This new StrictFP version of the method deals with the chain while unrolling the vector. With this new function in place during vector widending, llc can run vector-constrained-fp-intrinsics.ll for SystemZ successfully.
Details
Details
- Reviewers
kpn andrew.w.kaylor craig.topper cameron.mcinally uweigand - Commits
- rGac79007205ef: Revert revert of r362112 with minor SystemZ test file corrections.
rL362241: Revert revert of r362112 with minor SystemZ test file corrections.
rG51ce0b196a8b: Correct error in revert of r362112.
rL362118: Correct error in revert of r362112.
rGd3db7b40b053: Revert r362112, it broke the bots with the message "Unsupported vector argument…
rL362117: Revert r362112, it broke the bots with the message "Unsupported vector argument…
rG2e1807678d4d: [FPEnv] Added a special UnrollVectorOp method to deal with the chain on…
rL362112: [FPEnv] Added a special UnrollVectorOp method to deal with the chain on…
Diff Detail
Diff Detail
- Repository
- rG LLVM Github Monorepo
Event Timeline
Comment Actions
Modified the SystemZ test for this fix so that it also works for SystemZ Z13, which is afflicted by a different errror involving function return types at an earlier stage in compilation. To circumvent this, all v3f64 tests were changed so that they took a pointer parameter, modified the value at that pointer, and returned void. These still test StrictFP code generation while avoiding an unrelated platform specific error.
Comment Actions
LGTM, with one nit inline...
lib/CodeGen/SelectionDAG/LegalizeVectorTypes.cpp | ||
---|---|---|
1320 ↗ | (On Diff #202171) | Not sure about LLVM's coding style, but is this extra line ok? |