[all-commits] [llvm/llvm-project] 1a8468: [RISCV] Add a RISCV specific CodeGenPrepare pass.
Craig Topper via All-commits
all-commits at lists.llvm.org
Thu Jul 14 10:21:18 PDT 2022
Branch: refs/heads/main
Home: https://github.com/llvm/llvm-project
Commit: 1a8468ba6114719962442292ad4c1037bdb6256a
https://github.com/llvm/llvm-project/commit/1a8468ba6114719962442292ad4c1037bdb6256a
Author: Craig Topper <craig.topper at sifive.com>
Date: 2022-07-14 (Thu, 14 Jul 2022)
Changed paths:
M llvm/lib/Target/RISCV/CMakeLists.txt
M llvm/lib/Target/RISCV/RISCV.h
A llvm/lib/Target/RISCV/RISCVCodeGenPrepare.cpp
M llvm/lib/Target/RISCV/RISCVTargetMachine.cpp
M llvm/test/CodeGen/RISCV/O3-pipeline.ll
A llvm/test/CodeGen/RISCV/riscv-codegenprepare-asm.ll
A llvm/test/CodeGen/RISCV/riscv-codegenprepare.ll
Log Message:
-----------
[RISCV] Add a RISCV specific CodeGenPrepare pass.
Initial optimization is to convert (i64 (zext (i32 X))) to
(i64 (sext (i32 X))) if the dominating condition for the basic block
guaranteed the sign bit of X is zero.
This frequently occurs in loop preheaders where a signed induction
variable that can never be negative has been widened. There will be
a dominating check that the 32-bit trip count isn't negative or zero.
The check here is not restricted to that specific case though.
A i32->i64 sext is cheaper than zext on RV64 without the Zba
extension. Later optimizations can often remove the sext from the
preheader basic block because the dominating block also needs a sext to
evaluate the greater than 0 check.
Reviewed By: asb
Differential Revision: https://reviews.llvm.org/D129732
More information about the All-commits
mailing list