In D150851#4546075, @Mel-Chen wrote:In D150851#4542688, @Joe wrote:
- Only target induction variables that determine the branch condition in the loop latch. With this approach, we can indirectly determine whether the induction variable is signed using loop guards, and directly perform vectorization according to the signed overflow is undefined behavior.
@Mel-Chen I like this option. But I don't think I understand fully - what's the purposes of determining whether the induction variable is signed?
We need to determine whether we should use umax or smax in the middle.block. Currently, we have only implemented smax because the application of {1,+,step} unsigned induction variables is relatively uncommon.
Please use GitHub pull requests for new patches. Avoid migrating existing patches. Phabricator shutdown timeline
- Queries
- All Stories
- Search
- Advanced Search
- Transactions
- Transaction Logs
Feed Advanced Search
Advanced Search
Advanced Search
Jul 31 2023
Jul 31 2023
Joe added a comment to D150851: [LoopVectorize] Vectorize select-cmp reduction pattern for increasing integer induction variable.
Jul 28 2023
Jul 28 2023
Joe added a comment to D150851: [LoopVectorize] Vectorize select-cmp reduction pattern for increasing integer induction variable.
- Only target induction variables that determine the branch condition in the loop latch. With this approach, we can indirectly determine whether the induction variable is signed using loop guards, and directly perform vectorization according to the signed overflow is undefined behavior.
Jul 24 2023
Jul 24 2023
Joe updated the diff for D155294: [Driver][RISCV] Find baremetal multilibs using YAML for GNU toolchain.
Add default ABI to multilib flags if none supplied
Joe added a comment to D155294: [Driver][RISCV] Find baremetal multilibs using YAML for GNU toolchain.
Theoretically, I think this matching of multilibs could be done without the need for multilib.yaml, but it is indeed much easier considering the logic is already there.
Jul 14 2023
Jul 14 2023
Joe requested review of D155294: [Driver][RISCV] Find baremetal multilibs using YAML for GNU toolchain.
Jun 8 2023
Jun 8 2023
Jun 7 2023
Jun 7 2023
The mapping symbol seems to be getting stripped out at the linker stage (either ld or lld), but I'm not sure why. Will continue to look into it.
Mar 8 2023
Mar 8 2023
Joe added inline comments to D143673: [lld][RISCV] Implement GP relaxation for R_RISCV_HI20/R_RISCV_LO12_I/R_RISCV_LO12_S..
Joe added inline comments to D143673: [lld][RISCV] Implement GP relaxation for R_RISCV_HI20/R_RISCV_LO12_I/R_RISCV_LO12_S..
Feb 2 2023
Feb 2 2023
Thanks for explaining. I found that when I was writing a regex to match flags it was helpful to have a part of the string I could be sure would be there to avoid matching the wrong type of flag, and march= helped with that. I also worry that names from different types of flags could clash without some kind of namespacing.
The main trouble I had was at that point we don't have a reference to the ToolChain, so calling getMultiSelectionFlags was not possible. [...] I'm not sure what the solution here is.
I see two options:
- Split getMultiSelectionFlags into needs-ToolChain and doesn't-need-ToolChain parts, with the former calling the latter. From Gnu.cpp, call the latter, with the limitation that it can use fewer flags.
- Pass a ToolChain to the Gnu.cpp functions.
Feb 1 2023
Feb 1 2023
So again, I took these patches for a spin with RISC-V. As I mentioned before, I was using a GCC installation, so the multilib selection happens inside Gnu.cpp (findRISCVBareMetalMultilibs). The main trouble I had was at that point we don't have a reference to the ToolChain, so calling getMultiSelectionFlags was not possible. I had a go at making this function static, and it was mostly fine as you could just pass in the Triple and Driver, however getSanitizerArgs was not possible. I'm not sure what the solution here is.
FWIW I tried this patch out with RISC-V multilibs, and it works a treat. It solves the multilib reuse problem and relaxes the order of non-standard extensions. I did have to copy some of the logic from BareMetal.cpp to Gnu.cpp as was using a GCC installation.
Mar 21 2022
Mar 21 2022
Joe updated the diff for D120908: [FuncSpec] Enable function specialize for a constant range of arguments.
Updated diff. Now a very small change.
Ping
Mar 7 2022
Mar 7 2022
Herald added a project to D120136: [ConstantRange] Construct constant range from xor operation: Restricted Project.
Ping
Mar 4 2022
Mar 4 2022
Joe added a comment to D120908: [FuncSpec] Enable function specialize for a constant range of arguments.
In D120908#3358301, @labrinea wrote:My understanding is that function specialization of such constant arguments is controlled by the option -function-specialization-for-literal-constant. That is disabled by default as it increases compilation times. I measured how it affects instruction count using perf when compiling the llvm test suite. It was generally neutral except for the benchmark SPASS which was regressed by 4%.
Mar 3 2022
Mar 3 2022
Joe requested review of D120908: [FuncSpec] Enable function specialize for a constant range of arguments.
Feb 21 2022
Feb 21 2022
Add exhaustive correctness test.
Also remove signage test in binaryXor, as the common bits would be 0 anyway, thus creating a full set regardless.
Feb 18 2022
Feb 18 2022
Joe retitled D120136: [ConstantRange] Construct constant range from xor operation from [VRP] Construct constant range from xor operation to [ConstantRange] Construct constant range from xor operation.
Fix malformed diff.
Apr 13 2021
Apr 13 2021
Apr 7 2021
Apr 7 2021
Apr 8 2020
Apr 8 2020
LGTM, but probably wait for someone more experienced to upvote :)
Mar 20 2020
Mar 20 2020
Joe added inline comments to D74977: [RISCV][GlobalISel] Add lowerFormalArguments for calling convention.
What about G_OR and G_XOR? Is there a reason why they're not listed?
Mar 17 2020
Mar 17 2020
If you're supporting a pointer value return type, should there be a test for this?
Dec 2 2019
Dec 2 2019
Joe updated the diff for D68328: Fix occurrences that size and range of pointers are assumed to be the same..
Rebased on current head.
Nov 25 2019
Nov 25 2019
Joe added a comment to D68328: Fix occurrences that size and range of pointers are assumed to be the same..
In D68328#1758323, @igorb wrote:LGTM,
Thanks
Nov 14 2019
Nov 14 2019
Joe updated the diff for D68328: Fix occurrences that size and range of pointers are assumed to be the same..
Addressed @igorb 's comments.
Nov 13 2019
Nov 13 2019
Joe updated the diff for D68328: Fix occurrences that size and range of pointers are assumed to be the same..
Updated diff:
Nov 7 2019
Nov 7 2019
Joe added a comment to D68328: Fix occurrences that size and range of pointers are assumed to be the same..
After further review and testing, I have found that changing the effective SCEV type to be the pointer index type does not work. Though neither does it work when assumed to be pointer size. In many places, these are assumed to be the same. I'm unsure of which way to go with this. Do I force effective SCEV type to be the pointer size and enforce this, or change it to be index size and enforce this?
Nov 4 2019
Nov 4 2019
Joe added a comment to D68328: Fix occurrences that size and range of pointers are assumed to be the same..
Ping
Oct 4 2019
Oct 4 2019
Joe added inline comments to D68328: Fix occurrences that size and range of pointers are assumed to be the same..
Oct 2 2019
Oct 2 2019
Joe added inline comments to D68328: Fix occurrences that size and range of pointers are assumed to be the same..
Joe retitled D68328: Fix occurrences that size and range of pointers are assumed to be the same. from Fix occurances that size and range of pointers are assumed to be the same. to Fix occurrences that size and range of pointers are assumed to be the same..