[PATCH] D79778: [CodeGen] Remove buggy handling of input operands in inline asm

Victor Campos via Phabricator via llvm-commits llvm-commits at lists.llvm.org
Tue May 12 05:52:33 PDT 2020


vhscampos created this revision.
Herald added subscribers: llvm-commits, hiraditya.
Herald added a project: LLVM.
vhscampos added a reviewer: efriedma.

The detection of writes to reserved registers in inline asm cover the
three cases: input, output, or clobber operands. In the input case,
however, all uses are flagged as writes, even when the register is only
read from.

This patch removes the buggy part that handles input operands.

It seems that this case should be handled in clang instead, as the IR
(and codegen) stage is too late to properly detect writes to input
operands.


Repository:
  rG LLVM Github Monorepo

https://reviews.llvm.org/D79778

Files:
  llvm/lib/CodeGen/SelectionDAG/SelectionDAGBuilder.cpp
  llvm/test/CodeGen/ARM/inline-asm-reserved-registers.ll


Index: llvm/test/CodeGen/ARM/inline-asm-reserved-registers.ll
===================================================================
--- llvm/test/CodeGen/ARM/inline-asm-reserved-registers.ll
+++ llvm/test/CodeGen/ARM/inline-asm-reserved-registers.ll
@@ -7,13 +7,6 @@
   ret void
 }
 
-; CHECK-ERROR: error: write to reserved register 'R7'
-define void @test_framepointer_input(i32 %input) {
-entry:
-  %0 = call i32 asm sideeffect "mov $0, $1", "=r,{r7}"(i32 %input)
-  ret void
-}
-
 ; CHECK-ERROR: error: write to reserved register 'PC'
 define void @test_pc_output(i32 %input) {
 entry:
@@ -21,13 +14,6 @@
   ret void
 }
 
-; CHECK-ERROR: error: write to reserved register 'PC'
-define void @test_pc_input(i32 %input) {
-entry:
-  %0 = call i32 asm sideeffect "mov $0, $1", "=r,{pc}"(i32 %input)
-  ret void
-}
-
 ; CHECK-ERROR: error: write to reserved register 'R6'
 define void @test_basepointer_output(i32 %size, i32 %input) alignstack(8) {
 entry:
@@ -35,11 +21,3 @@
   %0 = call i32 asm sideeffect "mov $0, $1", "={r6},r"(i32 %input)
   ret void
 }
-
-; CHECK-ERROR: error: write to reserved register 'R6'
-define void @test_basepointer_input(i32 %size, i32 %input) alignstack(8) {
-entry:
-  %vla = alloca i32, i32 %size, align 4
-  %0 = call i32 asm sideeffect "mov $0, $1", "=r,{r6}"(i32 %input)
-  ret void
-}
Index: llvm/lib/CodeGen/SelectionDAG/SelectionDAGBuilder.cpp
===================================================================
--- llvm/lib/CodeGen/SelectionDAG/SelectionDAGBuilder.cpp
+++ llvm/lib/CodeGen/SelectionDAG/SelectionDAGBuilder.cpp
@@ -8339,9 +8339,6 @@
         return;
       }
 
-      if (DetectWriteToReservedRegister())
-        return;
-
       SDLoc dl = getCurSDLoc();
 
       OpInfo.AssignedRegs.getCopyToRegs(InOperandVal, DAG, dl, Chain, &Flag,


-------------- next part --------------
A non-text attachment was scrubbed...
Name: D79778.263405.patch
Type: text/x-patch
Size: 1792 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20200512/778dcc4a/attachment.bin>


More information about the llvm-commits mailing list