[llvm] r265734 - [TargetRegisterInfo] Refactor the code to use BitMaskClassIterator.

Mike Aizatsky via llvm-commits llvm-commits at lists.llvm.org
Thu Apr 7 17:29:03 PDT 2016


Quentin,

It seems that this change breaks a bot by triggering buffer overflow error:

http://lab.llvm.org:8011/builders/sanitizer-x86_64-linux-fast/builds/11741/steps/check-llvm%20asan/logs/stdio

Can you confirm?

READ of size 4 at 0x000004bc8c90 thread T0
    #0 0x31925b1 in moveToNextID
/mnt/b/sanitizer-buildbot3/sanitizer-x86_64-linux-fast/build/llvm/include/llvm/Target/TargetRegisterInfo.h:992:22
    #1 0x31925b1 in operator++
/mnt/b/sanitizer-buildbot3/sanitizer-x86_64-linux-fast/build/llvm/include/llvm/Target/TargetRegisterInfo.h:1049
    #2 0x31925b1 in
llvm::TargetRegisterInfo::getAllocatableClass(llvm::TargetRegisterClass
const*) const
/mnt/b/sanitizer-buildbot3/sanitizer-x86_64-linux-fast/build/llvm/lib/CodeGen/TargetRegisterInfo.cpp:116
    #3 0x3f1ba4b in
llvm::InstrEmitter::CreateVirtualRegisters(llvm::SDNode*,
llvm::MachineInstrBuilder&, llvm::MCInstrDesc const&, bool, bool,
llvm::DenseMap<llvm::SDValue, unsigned int,
llvm::DenseMapInfo<llvm::SDValue>,
llvm::detail::DenseMapPair<llvm::SDValue, unsigned int> >&)
/mnt/b/sanitizer-buildbot3/sanitizer-x86_64-linux-fast/build/llvm/lib/CodeGen/SelectionDAG/InstrEmitter.cpp:221:7
    #4 0x3f2745c in llvm::InstrEmitter::EmitMachineNode(llvm::SDNode*,
bool, bool, llvm::DenseMap<llvm::SDValue, unsigned int,
llvm::DenseMapInfo<llvm::SDValue>,
llvm::detail::DenseMapPair<llvm::SDValue, unsigned int> >&)
/mnt/b/sanitizer-buildbot3/sanitizer-x86_64-linux-fast/build/llvm/lib/CodeGen/SelectionDAG/InstrEmitter.cpp:789:5
    #5 0x3c4e6cc in EmitNode
/mnt/b/sanitizer-buildbot3/sanitizer-x86_64-linux-fast/build/llvm/lib/CodeGen/SelectionDAG/InstrEmitter.h:121:7
    #6 0x3c4e6cc in
llvm::ScheduleDAGSDNodes::EmitSchedule(llvm::MachineInstrBundleIterator<llvm::MachineInstr>&)
/mnt/b/sanitizer-buildbot3/sanitizer-x86_64-linux-fast/build/llvm/lib/CodeGen/SelectionDAG/ScheduleDAGSDNodes.cpp:845
    #7 0x3e559eb in llvm::SelectionDAGISel::CodeGenAndEmitDAG()
/mnt/b/sanitizer-buildbot3/sanitizer-x86_64-linux-fast/build/llvm/lib/CodeGen/SelectionDAG/SelectionDAGISel.cpp:877:31
    #8 0x3e50482 in
llvm::SelectionDAGISel::SelectAllBasicBlocks(llvm::Function const&)
/mnt/b/sanitizer-buildbot3/sanitizer-x86_64-linux-fast/build/llvm/lib/CodeGen/SelectionDAG/SelectionDAGISel.cpp:1490:7
    #9 0x3e46770 in
llvm::SelectionDAGISel::runOnMachineFunction(llvm::MachineFunction&)
/mnt/b/sanitizer-buildbot3/sanitizer-x86_64-linux-fast/build/llvm/lib/CodeGen/SelectionDAG/SelectionDAGISel.cpp:498:3
    #10 0xfd9b4d in (anonymous
namespace)::ARMDAGToDAGISel::runOnMachineFunction(llvm::MachineFunction&)
/mnt/b/sanitizer-buildbot3/sanitizer-x86_64-linux-fast/build/llvm/lib/Target/ARM/ARMISelDAGToDAG.cpp:75:5
    #11 0x2e10ecf in
llvm::MachineFunctionPass::runOnFunction(llvm::Function&)
/mnt/b/sanitizer-buildbot3/sanitizer-x86_64-linux-fast/build/llvm/lib/CodeGen/MachineFunctionPass.cpp:60:13
    #12 0x353c84c in llvm::FPPassManager::runOnFunction(llvm::Function&)
/mnt/b/sanitizer-buildbot3/sanitizer-x86_64-linux-fast/build/llvm/lib/IR/LegacyPassManager.cpp:1550:23
    #13 0x353cde5 in llvm::FPPassManager::runOnModule(llvm::Module&)
/mnt/b/sanitizer-buildbot3/sanitizer-x86_64-linux-fast/build/llvm/lib/IR/LegacyPassManager.cpp:1571:16
    #14 0x353dd12 in runOnModule
/mnt/b/sanitizer-buildbot3/sanitizer-x86_64-linux-fast/build/llvm/lib/IR/LegacyPassManager.cpp:1627:23
    #15 0x353dd12 in llvm::legacy::PassManagerImpl::run(llvm::Module&)
/mnt/b/sanitizer-buildbot3/sanitizer-x86_64-linux-fast/build/llvm/lib/IR/LegacyPassManager.cpp:1730
    #16 0x742cda in compileModule
/mnt/b/sanitizer-buildbot3/sanitizer-x86_64-linux-fast/build/llvm/tools/llc/llc.cpp:412:5
    #17 0x742cda in main
/mnt/b/sanitizer-buildbot3/sanitizer-x86_64-linux-fast/build/llvm/tools/llc/llc.cpp:218
    #18 0x7f7ddd0d2ec4 in __libc_start_main
(/lib/x86_64-linux-gnu/libc.so.6+0x21ec4)
    #19 0x654c5e in _start
(/mnt/b/sanitizer-buildbot3/sanitizer-x86_64-linux-fast/build/llvm_build_asan/bin/llc+0x654c5e)


On Thu, Apr 7, 2016 at 3:22 PM Quentin Colombet via llvm-commits <
llvm-commits at lists.llvm.org> wrote:

> Author: qcolombet
> Date: Thu Apr  7 17:16:56 2016
> New Revision: 265734
>
> URL: http://llvm.org/viewvc/llvm-project?rev=265734&view=rev
> Log:
> [TargetRegisterInfo] Refactor the code to use BitMaskClassIterator.
>
> Modified:
>     llvm/trunk/lib/CodeGen/TargetRegisterInfo.cpp
>
> Modified: llvm/trunk/lib/CodeGen/TargetRegisterInfo.cpp
> URL:
> http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/CodeGen/TargetRegisterInfo.cpp?rev=265734&r1=265733&r2=265734&view=diff
>
> ==============================================================================
> --- llvm/trunk/lib/CodeGen/TargetRegisterInfo.cpp (original)
> +++ llvm/trunk/lib/CodeGen/TargetRegisterInfo.cpp Thu Apr  7 17:16:56 2016
> @@ -112,18 +112,11 @@ TargetRegisterInfo::getAllocatableClass(
>    if (!RC || RC->isAllocatable())
>      return RC;
>
> -  const unsigned *SubClass = RC->getSubClassMask();
> -  for (unsigned Base = 0, BaseE = getNumRegClasses();
> -       Base < BaseE; Base += 32) {
> -    unsigned Idx = Base;
> -    for (unsigned Mask = *SubClass++; Mask; Mask >>= 1) {
> -      unsigned Offset = countTrailingZeros(Mask);
> -      const TargetRegisterClass *SubRC = getRegClass(Idx + Offset);
> -      if (SubRC->isAllocatable())
> -        return SubRC;
> -      Mask >>= Offset;
> -      Idx += Offset + 1;
> -    }
> +  for (BitMaskClassIterator It(RC->getSubClassMask(), *this);
> It.isValid();
> +       ++It) {
> +    const TargetRegisterClass *SubRC = getRegClass(It.getID());
> +    if (SubRC->isAllocatable())
> +      return SubRC;
>    }
>    return nullptr;
>  }
>
>
> _______________________________________________
> llvm-commits mailing list
> llvm-commits at lists.llvm.org
> http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-commits
>
-- 
Mike
Sent from phone
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20160408/994e7c2b/attachment.html>


More information about the llvm-commits mailing list