Unfortunately, that leads to another error, in the Instruction::Store case. 
IRInterpreter::ResolveConstantValue() returns an error because it doesn’t like 
the value id of FunctionVal. “Interpreter couldn't resolve a value during 
execution”.

 

If I go back 1 commit from r260768 (r260767), it works. The value id is 0xa, 
ConstantIntVal. So something in r260768 is either setting the value id to 0x5, 
or keeping the value id from being set to 0xa.

 

Ted

--

Qualcomm Innovation Center, Inc.

The Qualcomm Innovation Center, Inc. is a member of Code Aurora Forum, a Linux 
Foundation Collaborative Project

 

From: scalla...@apple.com [mailto:scalla...@apple.com] 
Sent: Tuesday, February 23, 2016 5:41 PM
To: Ted Woodward
Cc: LLDB
Subject: Re: r260768 (Removed many JIT workarounds from IRForTarget) broke 
expression parser with function on Hexagon

 

Ted,

 

I’m not sure who inside Clang actually sets the value ID – it’s the code 
generator’s job to make IR, we don’t construct it.

I would be fine with adding FunctionVal to the switch in CanResolveConstant, 
returning true.

 

Sean

 

On Feb 23, 2016, at 3:28 PM, Ted Woodward <ted.woodw...@codeaurora.org 
<mailto:ted.woodw...@codeaurora.org> > wrote:

 

Background: Hexagon clang doesn’t have JIT support, so lldb for Hexagon only 
uses the IR Interpreter (Codeplay wrote it for us).

 

Sean, r260768 broke the expression parser with functions.

 

Without connecting to a target, I can’t get the info for main:

(lldb) e main

error: Can't run the expression locally: Interpreter doesn't handle one of the 
expression's operands

 

Connected to a target, I can’t run a function:

(lldb) e factorial(5)

error: Can't run the expression locally: Interpreter doesn't handle one of the 
expression's operands

 

 

I’ve traced the failure to the call to CanResolveConstant() in 
IRInterpreter::CanIntepret(). The failure happens on the 2nd operand. In the 
working case, the Value ID is 0xa – Value::ConstantExprVal. In the failing 
case, it is 0x5. Since it’s defined in a .def file, I can’t be sure, but my 
guess is its Value::FunctionVal.

 

 

Where is the Value ID set?

 

 

 

Some info from the expr log:

 

; Function Attrs: nounwind

define void @"_Z12$__lldb_exprPv"(i8* %"$__lldb_arg") #0 {

entry:

  %"$__lldb_arg.addr" = alloca i8*, align 4, !clang.decl.ptr !4

  store i8* %"$__lldb_arg", i8** %"$__lldb_arg.addr", align 4

  %0 = load i8, i8* @"_ZGVZ12$__lldb_exprPvE19$__lldb_expr_result", align 1

  %guard.uninitialized = icmp eq i8 %0, 0

  br i1 %guard.uninitialized, label %init.check, label %init.end

 

init.check:                                       ; preds = %entry

  %call = call i32 @factorial(i32 5)

  store i32 %call, i32* @"_ZZ12$__lldb_exprPvE19$__lldb_expr_result", align 4

  store i8 1, i8* @"_ZGVZ12$__lldb_exprPvE19$__lldb_expr_result", align 1

  br label %init.end

 

init.end:                                         ; preds = %init.check, %entry

  ret void

}

 

 

Unsupported constant: declare i32 @factorial(i32) #1

 

 

Ted

 

--

Qualcomm Innovation Center, Inc.

The Qualcomm Innovation Center, Inc. is a member of Code Aurora Forum, a Linux 
Foundation Collaborative Project

 

_______________________________________________
lldb-dev mailing list
lldb-dev@lists.llvm.org
http://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-dev

Reply via email to