[llvm-bugs] [Bug 48458] New: isREXExtendedReg called on non-reg operand of MRMDestMem

via llvm-bugs llvm-bugs at lists.llvm.org
Wed Dec 9 06:25:49 PST 2020


https://bugs.llvm.org/show_bug.cgi?id=48458

            Bug ID: 48458
           Summary: isREXExtendedReg called on non-reg operand of
                    MRMDestMem
           Product: libraries
           Version: trunk
          Hardware: PC
                OS: Linux
            Status: NEW
          Severity: enhancement
          Priority: P
         Component: Backend: X86
          Assignee: unassignedbugs at nondot.org
          Reporter: tim.besard at gmail.com
                CC: craig.topper at gmail.com, llvm-bugs at lists.llvm.org,
                    llvm-dev at redking.me.uk, pengfei.wang at intel.com,
                    spatel+llvm at rotateright.com

The following IR violates an assertion in the x86 machine code emitter on
current trunk:

```
target datalayout =
"e-m:e-p270:32:32-p271:32:32-p272:64:64-i64:64-f80:128-n8:16:32:64-S128"
target triple = "x86_64-unknown-linux-gnu"

define i1 @foo(i64* %0) {
top:
  %1 = load i64, i64* %0, !range !0
  %2 = icmp ult i64 %1, 2147483648
  ret i1 %2
}

!0 = !{i64 0, i64 10000000000}
```

The assertion and backtrace:

llc: llvm/include/llvm/MC/MCInst.h:65: unsigned int llvm::MCOperand::getReg()
const: Assertion `isReg() && "This is not a register operand!"' failed.
PLEASE submit a bug report to https://bugs.llvm.org/ and include the crash
backtrace.
Stack dump:
0.      Program arguments: ./bin/llc ../wip.ll
1.      Running pass 'Function Pass Manager' on module '../wip.ll'.
2.      Running pass 'X86 Assembly Printer' on function '@foo'
 #0 0x00007f2d65e9914d llvm::sys::PrintStackTrace(llvm::raw_ostream&, int)
llvm/lib/Support/Unix/Signals.inc:567:3
 #1 0x00007f2d65e96fe4 llvm::sys::RunSignalHandlers()
llvm/lib/Support/Signals.cpp:71:20
 #2 0x00007f2d65e97825 SignalHandler(int)
llvm/lib/Support/Unix/Signals.inc:395:31
 #3 0x00007f2d680fa700 __restore_rt
(/nix/store/5didcr1sjp2rlx8abbzv92rgahsarqd9-glibc-2.32/lib/libpthread.so.0+0x12700)
 #4 0x00007f2d6582441a raise
(/nix/store/5didcr1sjp2rlx8abbzv92rgahsarqd9-glibc-2.32/lib/libc.so.6+0x3841a)
 #5 0x00007f2d6580e523 abort
(/nix/store/5didcr1sjp2rlx8abbzv92rgahsarqd9-glibc-2.32/lib/libc.so.6+0x22523)
 #6 0x00007f2d6580e41f _nl_load_domain.cold.0
(/nix/store/5didcr1sjp2rlx8abbzv92rgahsarqd9-glibc-2.32/lib/libc.so.6+0x2241f)
 #7 0x00007f2d6581cd52
(/nix/store/5didcr1sjp2rlx8abbzv92rgahsarqd9-glibc-2.32/lib/libc.so.6+0x30d52)
 #8 0x00007f2d683d3af3 llvm/include/llvm/MC/MCInst.h:65:5
 #9 0x00007f2d683d3d4a llvm/include/llvm/ADT/SmallVector.h:250:5
#10 0x00007f2d683d5701 operator()
llvm/lib/Target/X86/MCTargetDesc/X86MCCodeEmitter.cpp:1261:7
#11 0x00007f2d683d5701 emitREXPrefix
llvm/lib/Target/X86/MCTargetDesc/X86MCCodeEmitter.cpp:1297:4
#12 0x00007f2d683d5701 emitOpcodePrefix
llvm/lib/Target/X86/MCTargetDesc/X86MCCodeEmitter.cpp:1356:36
#13 0x00007f2d683d5701 (anonymous
namespace)::X86MCCodeEmitter::emitPrefixImpl(unsigned int&, llvm::MCInst
const&, llvm::MCSubtargetInfo const&, llvm::raw_ostream&) const
llvm/lib/Target/X86/MCTargetDesc/X86MCCodeEmitter.cpp:703:30
#14 0x00007f2d683d7b97 (anonymous
namespace)::X86MCCodeEmitter::encodeInstruction(llvm::MCInst const&,
llvm::raw_ostream&, llvm::SmallVectorImpl<llvm::MCFixup>&,
llvm::MCSubtargetInfo const&) const
llvm/lib/Target/X86/MCTargetDesc/X86MCCodeEmitter.cpp:1427:16
#15 0x00007f2d6898c2f1
llvm::X86AsmPrinter::StackMapShadowTracker::count(llvm::MCInst&,
llvm::MCSubtargetInfo const&, llvm::MCCodeEmitter*) (.part.0)
llvm/lib/Target/X86/X86MCInstLower.cpp:110:23
#16 0x00007f2d6899409e llvm::SmallVectorTemplateCommon<llvm::MCOperand,
void>::end() llvm/include/llvm/ADT/SmallVector.h:224:35
#17 0x00007f2d6899409e llvm::SmallVector<llvm::MCOperand, 8u>::~SmallVector()
llvm/include/llvm/ADT/SmallVector.h:1026:5
#18 0x00007f2d6899409e llvm::MCInst::~MCInst()
llvm/include/llvm/MC/MCInst.h:158:7
#19 0x00007f2d6899409e llvm::X86AsmPrinter::emitInstruction(llvm::MachineInstr
const*) llvm/lib/Target/X86/X86MCInstLower.cpp:2613:10
#20 0x00007f2d681a35bc llvm::AsmPrinter::emitFunctionBody()
llvm/lib/CodeGen/AsmPrinter/AsmPrinter.cpp:1224:9
#21 0x00007f2d6871a32f
llvm::X86AsmPrinter::runOnMachineFunction(llvm::MachineFunction&)
llvm/lib/Target/X86/X86AsmPrinter.cpp:85:16
#22 0x00007f2d675847b1
llvm::MachineFunctionPass::runOnFunction(llvm::Function&)
llvm/lib/CodeGen/MachineFunctionPass.cpp:72:33
#23 0x00007f2d675847b1
llvm::MachineFunctionPass::runOnFunction(llvm::Function&)
llvm/lib/CodeGen/MachineFunctionPass.cpp:37:6
#24 0x00007f2d662af3dd llvm::FPPassManager::runOnFunction(llvm::Function&)
llvm/lib/IR/LegacyPassManager.cpp:1450:7
#25 0x00007f2d662afea1
llvm::ilist_node_impl<llvm::ilist_detail::node_options<llvm::Function, true,
false, void> >::getNext() llvm/include/llvm/ADT/ilist_node.h:66:66
#26 0x00007f2d662afea1
llvm::ilist_iterator<llvm::ilist_detail::node_options<llvm::Function, true,
false, void>, false, false>::operator++()
llvm/include/llvm/ADT/ilist_iterator.h:157:25
#27 0x00007f2d662afea1 llvm::FPPassManager::runOnModule(llvm::Module&)
llvm/lib/IR/LegacyPassManager.cpp:1485:22
#28 0x00007f2d662aedb8 runOnModule llvm/lib/IR/LegacyPassManager.cpp:1562:7
#29 0x00007f2d662aedb8 llvm::legacy::PassManagerImpl::run(llvm::Module&)
llvm/lib/IR/LegacyPassManager.cpp:542:55
#30 0x000000000040cfb6 compileModule llvm/tools/llc/llc.cpp:661:66
#31 0x000000000040cfb6 main llvm/tools/llc/llc.cpp:363:35
#32 0x00007f2d6580fdbd __libc_start_main
(/nix/store/5didcr1sjp2rlx8abbzv92rgahsarqd9-glibc-2.32/lib/libc.so.6+0x23dbd)
#33 0x000000000040d84a _start
/build/glibc-2.32/csu/../sysdeps/x86_64/start.S:122:0

The MCInst in question: MRMDestMem: <MCInst 2993 <MCOperand Reg:53> <MCOperand
Imm:1> <MCOperand Reg:0> <MCOperand Imm:0> <MCOperand Reg:0> <MCOperand
Imm:-2147483648>>. The code calls isREXExtendedReg on the 5th operand, here an
immediate, which results in an abort. With other inputs this operand seems
always to be a register, but I'm not familiar with this part of LLVM to know if
I can just add an `isReg` check here, or whether this is something invalid in
the first place.

-- 
You are receiving this mail because:
You are on the CC list for the bug.
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-bugs/attachments/20201209/de3bdb7c/attachment.html>


More information about the llvm-bugs mailing list