[PATCH] D125459: [FastISel] Fix load folding for registers with fixups

Nikita Popov via Phabricator via llvm-commits llvm-commits at lists.llvm.org
Mon May 16 01:25:45 PDT 2022


This revision was landed with ongoing or failed builds.
This revision was automatically updated to reflect the committed changes.
Closed by commit rG05c3fe075d60: [FastISel] Fix load folding for registers with fixups (authored by nikic).

Repository:
  rG LLVM Github Monorepo

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D125459/new/

https://reviews.llvm.org/D125459

Files:
  llvm/lib/CodeGen/SelectionDAG/FastISel.cpp
  llvm/test/CodeGen/X86/fast-isel-load-bitcast-fold.ll


Index: llvm/test/CodeGen/X86/fast-isel-load-bitcast-fold.ll
===================================================================
--- /dev/null
+++ llvm/test/CodeGen/X86/fast-isel-load-bitcast-fold.ll
@@ -0,0 +1,36 @@
+; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
+; RUN: llc -O0 -mtriple=x86_64-- -verify-machineinstrs < %s | FileCheck %s
+
+define void @repro(i8** %a0, i1 %a1) nounwind {
+; CHECK-LABEL: repro:
+; CHECK:       # %bb.0:
+; CHECK-NEXT:    subq $24, %rsp
+; CHECK-NEXT:    movb %sil, %al
+; CHECK-NEXT:    movb %al, {{[-0-9]+}}(%r{{[sb]}}p) # 1-byte Spill
+; CHECK-NEXT:    movq (%rdi), %rax
+; CHECK-NEXT:    movq %rax, {{[-0-9]+}}(%r{{[sb]}}p) # 8-byte Spill
+; CHECK-NEXT:    callq *%rax
+; CHECK-NEXT:    movb {{[-0-9]+}}(%r{{[sb]}}p), %al # 1-byte Reload
+; CHECK-NEXT:    testb $1, %al
+; CHECK-NEXT:    jne .LBB0_1
+; CHECK-NEXT:    jmp .LBB0_2
+; CHECK-NEXT:  .LBB0_1: # %bb1
+; CHECK-NEXT:    movq {{[-0-9]+}}(%r{{[sb]}}p), %rax # 8-byte Reload
+; CHECK-NEXT:    callq *%rax
+; CHECK-NEXT:    addq $24, %rsp
+; CHECK-NEXT:    retq
+; CHECK-NEXT:  .LBB0_2: # %bb2
+; CHECK-NEXT:    addq $24, %rsp
+; CHECK-NEXT:    retq
+  %tmp0 = load i8*, i8** %a0
+  %tmp1 = bitcast i8* %tmp0 to void ()*
+  call void %tmp1()
+  br i1 %a1, label %bb1, label %bb2
+
+bb1:
+  call void %tmp1()
+  ret void
+
+bb2:
+  ret void
+}
Index: llvm/lib/CodeGen/SelectionDAG/FastISel.cpp
===================================================================
--- llvm/lib/CodeGen/SelectionDAG/FastISel.cpp
+++ llvm/lib/CodeGen/SelectionDAG/FastISel.cpp
@@ -2230,6 +2230,11 @@
   if (!MRI.hasOneUse(LoadReg))
     return false;
 
+  // If the register has fixups, there may be additional uses through a
+  // different alias of the register.
+  if (FuncInfo.RegsWithFixups.contains(LoadReg))
+    return false;
+
   MachineRegisterInfo::reg_iterator RI = MRI.reg_begin(LoadReg);
   MachineInstr *User = RI->getParent();
 


-------------- next part --------------
A non-text attachment was scrubbed...
Name: D125459.429641.patch
Type: text/x-patch
Size: 1949 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20220516/8387ddd1/attachment.bin>


More information about the llvm-commits mailing list