[all-commits] [llvm/llvm-project] d49f64: [AArch64][GlobalISel] Refactor G_BRCOND selection
Jessica Paquette via All-commits
all-commits at lists.llvm.org
Mon Dec 7 17:24:49 PST 2020
Branch: refs/heads/main
Home: https://github.com/llvm/llvm-project
Commit: d49f6491b6d1439b5a65ff6e965b65a66d943b63
https://github.com/llvm/llvm-project/commit/d49f6491b6d1439b5a65ff6e965b65a66d943b63
Author: Jessica Paquette <jpaquette at apple.com>
Date: 2020-12-07 (Mon, 07 Dec 2020)
Changed paths:
M llvm/lib/Target/AArch64/GISel/AArch64InstructionSelector.cpp
M llvm/test/CodeGen/AArch64/GlobalISel/speculative-hardening-brcond.mir
Log Message:
-----------
[AArch64][GlobalISel] Refactor G_BRCOND selection
`selectCompareBranch` was hard to understand.
Also, it was being needlessly pessimistic with the `ProduceNonFlagSettingCondBr`
case. It assumed that everything in `selectCompareBranch` would emit a TB(N)Z
or C(B)NZ. That's not true; the G_FCMP + G_BRCOND case would never emit those
instructions, and the G_ICMP + G_BRCOND case was capable of emitting an integer
compare + Bcc.
- Refactor `selectCompareBranch` into separate functions based off of what is
feeding the G_BRCOND's condition.
- Move G_BRCOND selection code from `select` to `selectCompareBranch`.
- Remove duplicated constraint code from the code originally in `select`;
`emitTestBit` already handles that, so no need to constrain twice.
- Factor out the G_FCMP + G_BRCOND case into `selectCompareBranchFedByFCmp`.
- Split the G_ICMP + G_BRCOND case into an optimization function,
`tryOptCompareBranchFedByICmp` and a general selection function,
`selectCompareBranchFedByICmp`.
- Reduce the number of things passed to `tryOptAndIntoCompareBranch`.
- Improve documentation.
- Give some variables more descriptive names.
Other than improving the code generation for functions with
speculative_load_hardening by getting the logic correct, this is NFC.
Differential Revision: https://reviews.llvm.org/D92582
More information about the All-commits
mailing list