[llvm-dev] Conditional jump or move depends on uninitialised value(s)

regehr via llvm-dev llvm-dev at lists.llvm.org
Mon Nov 21 15:38:22 PST 2016


I spent some time digging into a Valgrind report of uninitialized values 
in LLVM r287520 built using itself.  (One of quite a few such reports 
that comes up during a "make check".)

I could use another set of eyes on the issue if someone has time.

This command gives me an error:

valgrind -q ./bin/llc < 
/home/regehr/llvm/test/CodeGen/Hexagon/hwloop-dbg.ll -march=hexagon 
-mcpu=hexagonv4

The error is at this line:

https://github.com/llvm-mirror/llvm/blob/master/lib/CodeGen/DeadMachineInstructionElim.cpp#L142

Here I've refactored the code into a minimal (noinline) function that 
still triggers the problem.  xfunc2() and xfunc3() are also noinline. 
The problem goes away if either isReg() or isDef() is marked noinline.

void xfuncx(const MachineOperand &MO,
	    const TargetRegisterInfo *TRI,
	   BitVector &LivePhysRegs)  {
   if (MO.isReg() &&  // <<<<------ problem reported here
       MO.isDef()) {
     xfunc2(MO, TRI, LivePhysRegs);
   } else {
     xfunc3(MO, LivePhysRegs);
   }
}

The asm is below.  Maybe I've been staring too long but I don't see the 
problem Valgrind is talking about.

John


	.section 
.text._Z6xfuncxRKN4llvm14MachineOperandEPKNS_18TargetRegisterInfoERNS_9BitVectorE,"ax", at progbits
	.globl 
_Z6xfuncxRKN4llvm14MachineOperandEPKNS_18TargetRegisterInfoERNS_9BitVectorE
	.p2align	4, 0x90
	.type 
_Z6xfuncxRKN4llvm14MachineOperandEPKNS_18TargetRegisterInfoERNS_9BitVectorE, at function
_Z6xfuncxRKN4llvm14MachineOperandEPKNS_18TargetRegisterInfoERNS_9BitVectorE: 
# 
@_Z6xfuncxRKN4llvm14MachineOperandEPKNS_18TargetRegisterInfoERNS_9BitVectorE
.Lfunc_begin4:
	.loc	2 126 0                 # 
../lib/CodeGen/DeadMachineInstructionElim.cpp:126:0
	.cfi_startproc
# BB#0:                                 # %entry
	#DEBUG_VALUE: xfuncx:MO <- %RDI
	#DEBUG_VALUE: xfuncx:TRI <- %RSI
	#DEBUG_VALUE: xfuncx:LivePhysRegs <- %RDX
	#DEBUG_VALUE: isReg:this <- %RDI
	.loc	2 127 18 prologue_end   # 
../lib/CodeGen/DeadMachineInstructionElim.cpp:127:18
	movl	$16777471, %eax         # imm = 0x10000FF
	andl	(%rdi), %eax
.Ltmp128:
	#DEBUG_VALUE: isReg:this <- %RDI
	cmpl	$16777216, %eax         # imm = 0x1000000
	jne	.LBB4_2
# BB#1:                                 # %if.then
	#DEBUG_VALUE: xfuncx:LivePhysRegs <- %RDX
	#DEBUG_VALUE: xfuncx:TRI <- %RSI
	#DEBUG_VALUE: xfuncx:MO <- %RDI
.Ltmp129:
	.loc	2 129 5                 # 
../lib/CodeGen/DeadMachineInstructionElim.cpp:129:5
	jmp 
_Z6xfunc2RKN4llvm14MachineOperandEPKNS_18TargetRegisterInfoERNS_9BitVectorE at PLT 
# TAILCALL
.Ltmp130:
.LBB4_2:                                # %if.else
	#DEBUG_VALUE: xfuncx:LivePhysRegs <- %RDX
	#DEBUG_VALUE: xfuncx:TRI <- %RSI
	#DEBUG_VALUE: xfuncx:MO <- %RDI
	.loc	2 131 5                 # 
../lib/CodeGen/DeadMachineInstructionElim.cpp:131:5
	movq	%rdx, %rsi
	jmp	_Z6xfunc3RKN4llvm14MachineOperandERNS_9BitVectorE at PLT # TAILCALL
.Ltmp131:
.Lfunc_end4:
	.size 
_Z6xfuncxRKN4llvm14MachineOperandEPKNS_18TargetRegisterInfoERNS_9BitVectorE, 
.Lfunc_end4-_Z6xfuncxRKN4llvm14MachineOperandEPKNS_18TargetRegisterInfoERNS_9BitVectorE
	.cfi_endproc


More information about the llvm-dev mailing list