[llvm] 888f84f - [ARM] Return the correct chain when expanding READ_REGISTER (#145237)
via llvm-commits
llvm-commits at lists.llvm.org
Tue Jun 24 23:08:50 PDT 2025
Author: David Green
Date: 2025-06-25T07:08:46+01:00
New Revision: 888f84f72c07dfad8f266d907799c4060835a960
URL: https://github.com/llvm/llvm-project/commit/888f84f72c07dfad8f266d907799c4060835a960
DIFF: https://github.com/llvm/llvm-project/commit/888f84f72c07dfad8f266d907799c4060835a960.diff
LOG: [ARM] Return the correct chain when expanding READ_REGISTER (#145237)
This prevents it CSEing multiple nodes together from "volatile"
registers as they would end up with the same chain. The new chain out
should be the chain from the new READ_REGISTER node.
Fixes #144845
Added:
Modified:
llvm/lib/Target/ARM/ARMISelLowering.cpp
llvm/test/CodeGen/ARM/special-reg.ll
Removed:
################################################################################
diff --git a/llvm/lib/Target/ARM/ARMISelLowering.cpp b/llvm/lib/Target/ARM/ARMISelLowering.cpp
index b67161b060638..c106835bdf3a8 100644
--- a/llvm/lib/Target/ARM/ARMISelLowering.cpp
+++ b/llvm/lib/Target/ARM/ARMISelLowering.cpp
@@ -6186,7 +6186,7 @@ static void ExpandREAD_REGISTER(SDNode *N, SmallVectorImpl<SDValue> &Results,
Results.push_back(DAG.getNode(ISD::BUILD_PAIR, DL, MVT::i64, Read.getValue(0),
Read.getValue(1)));
- Results.push_back(Read.getOperand(0));
+ Results.push_back(Read.getValue(2)); // Chain
}
/// \p BC is a bitcast that is about to be turned into a VMOVDRR.
diff --git a/llvm/test/CodeGen/ARM/special-reg.ll b/llvm/test/CodeGen/ARM/special-reg.ll
index e966550e673d4..cc95f79d2c73b 100644
--- a/llvm/test/CodeGen/ARM/special-reg.ll
+++ b/llvm/test/CodeGen/ARM/special-reg.ll
@@ -25,14 +25,18 @@ entry:
define i64 @read_volatile_i64_twice() {
; ACORE-LABEL: read_volatile_i64_twice:
; ACORE: @ %bb.0: @ %entry
-; ACORE-NEXT: mov r0, #0
-; ACORE-NEXT: mov r1, #0
+; ACORE-NEXT: mrrc p15, #1, r0, r1, c14
+; ACORE-NEXT: mrrc p15, #1, r2, r3, c14
+; ACORE-NEXT: eor r0, r2, r0
+; ACORE-NEXT: eor r1, r3, r1
; ACORE-NEXT: bx lr
;
; MCORE-LABEL: read_volatile_i64_twice:
; MCORE: @ %bb.0: @ %entry
-; MCORE-NEXT: movs r0, #0
-; MCORE-NEXT: movs r1, #0
+; MCORE-NEXT: mrrc p15, #1, r0, r1, c14
+; MCORE-NEXT: mrrc p15, #1, r2, r3, c14
+; MCORE-NEXT: eors r0, r2
+; MCORE-NEXT: eors r1, r3
; MCORE-NEXT: bx lr
entry:
%0 = tail call i64 @llvm.read_volatile_register.i64(metadata !5)
More information about the llvm-commits
mailing list