[llvm] [InferAlignment] Misc. refactoring (NFC) (PR #112699)
via llvm-commits
llvm-commits at lists.llvm.org
Thu Oct 17 05:49:04 PDT 2024
https://github.com/ParkHanbum updated https://github.com/llvm/llvm-project/pull/112699
>From 51376cf6d5d15b3bda0087b5f10ff04f745cda12 Mon Sep 17 00:00:00 2001
From: hanbeom <kese111 at gmail.com>
Date: Thu, 17 Oct 2024 19:10:25 +0900
Subject: [PATCH] [InferAlignment][NFC] Unify Load/Store handling in
tryToImproveAlign
Removes code duplication in tryToImproveAlign by unifying load and
store instruction handling with getLoadStore helper functions.
---
llvm/include/llvm/IR/Instructions.h | 10 +++++++++
llvm/lib/Transforms/Scalar/InferAlignment.cpp | 21 +++++++------------
2 files changed, 17 insertions(+), 14 deletions(-)
diff --git a/llvm/include/llvm/IR/Instructions.h b/llvm/include/llvm/IR/Instructions.h
index e89739a5552662..3772c57ef83b04 100644
--- a/llvm/include/llvm/IR/Instructions.h
+++ b/llvm/include/llvm/IR/Instructions.h
@@ -4952,6 +4952,16 @@ inline Align getLoadStoreAlignment(const Value *I) {
return cast<StoreInst>(I)->getAlign();
}
+/// A helper function that set the alignment of load or store instruction.
+inline void setLoadStoreAlignment(Value *I, Align NewAlign) {
+ assert((isa<LoadInst>(I) || isa<StoreInst>(I)) &&
+ "Expected Load or Store instruction");
+ if (auto *LI = dyn_cast<LoadInst>(I))
+ LI->setAlignment(NewAlign);
+ else
+ cast<StoreInst>(I)->setAlignment(NewAlign);
+}
+
/// A helper function that returns the address space of the pointer operand of
/// load or store instruction.
inline unsigned getLoadStoreAddressSpace(const Value *I) {
diff --git a/llvm/lib/Transforms/Scalar/InferAlignment.cpp b/llvm/lib/Transforms/Scalar/InferAlignment.cpp
index 6e0c206bd19805..21d373790ac53d 100644
--- a/llvm/lib/Transforms/Scalar/InferAlignment.cpp
+++ b/llvm/lib/Transforms/Scalar/InferAlignment.cpp
@@ -25,21 +25,14 @@ using namespace llvm;
static bool tryToImproveAlign(
const DataLayout &DL, Instruction *I,
function_ref<Align(Value *PtrOp, Align OldAlign, Align PrefAlign)> Fn) {
- if (auto *LI = dyn_cast<LoadInst>(I)) {
- Value *PtrOp = LI->getPointerOperand();
- Align OldAlign = LI->getAlign();
- Align NewAlign = Fn(PtrOp, OldAlign, DL.getPrefTypeAlign(LI->getType()));
- if (NewAlign > OldAlign) {
- LI->setAlignment(NewAlign);
- return true;
- }
- } else if (auto *SI = dyn_cast<StoreInst>(I)) {
- Value *PtrOp = SI->getPointerOperand();
- Value *ValOp = SI->getValueOperand();
- Align OldAlign = SI->getAlign();
- Align NewAlign = Fn(PtrOp, OldAlign, DL.getPrefTypeAlign(ValOp->getType()));
+
+ if (auto *PtrOp = getLoadStorePointerOperand(I)) {
+ Align OldAlign = getLoadStoreAlignment(I);
+ Align PrefAlign = DL.getPrefTypeAlign(getLoadStoreType(I));
+
+ Align NewAlign = Fn(PtrOp, OldAlign, PrefAlign);
if (NewAlign > OldAlign) {
- SI->setAlignment(NewAlign);
+ setLoadStoreAlignment(I, NewAlign);
return true;
}
}
More information about the llvm-commits
mailing list