<div dir="ltr"><div dir="ltr"><div dir="ltr"><div dir="ltr">I am trying to give a quota of how many instructions can be run to a program.<div>So create a simple function as below:</div><div><br></div><div><div>define void @add_gas(i64 %gasCost) {</div><div>__virtual_entry:</div><div>  %0 = load i64, i64* @__WAVM__XX__gGasUsed     ### I am sure it exists, same as the __WAVM__XX__gGasLimit</div><div>  %addtmp = add i64 %0, %gasCost</div><div>  %1 = load i64, i64* @__WAVM__XX__gGasLimit</div><div>  %cmptmp = icmp sgt i64 %addtmp, %1</div><div>  br i1 %cmptmp, label %then, label %ifcont</div><div><br></div><div>then:                                             ; preds = %__virtual_entry</div><div>  call void @exit(i32 1024)</div><div>  ret void</div><div><br></div><div>ifcont:                                           ; preds = %__virtual_entry</div><div>  store i64 %addtmp, i64* @__WAVM__XX__gGasUsed</div><div>  ret void</div><div>}</div><div><br></div><div>; Function Attrs: noreturn nounwind</div><div>declare void @exit(i32) #2</div><div><br></div><div>Then, I insert this function into the beginning of each basic block the way as below:</div><div>...</div><div><div>ifElse55:                                         ; preds = %ifElseEnd53</div><div>  call void @add_gas(i64 1)</div><div>  br label %ifElseEnd56</div><div><br></div><div>ifElseEnd56:                                      ; preds = %ifElse55, %ifThen54</div><div>  call void @add_gas(i64 2)</div><div>  %378 = load i32, i32* %11</div><div>  br label %ifElseEnd41</div><div><br></div><div>ifElse40:                                         ; preds = %blockEnd23</div><div>  call void @add_gas(i64 2)</div><div>  %379 = load i32, i32* %11</div><div>  br label %ifElseEnd41</div><div><br></div><div>ifElseEnd41:                                      ; preds = %ifElse40, %ifElseEnd56</div><div>  call void @add_gas(i64 2)</div><div>  %380 = phi i32 [ %378, %ifElseEnd56 ], [ %379, %ifElse40 ]</div><div>  br label %ifElseEnd3</div><div><br></div><div>ifElseEnd3:                                       ; preds = %ifElseEnd41, %ifThen1</div></div><div>...</div><div><br></div><div>but, when I run my program by RuntimeDyld,  I got an error:</div><div><br></div><div><div>While deleting: i32 %</div><div>Use still stuck around after Def is destroyed:  %380 = phi i32 [ %40, %ifThen1 ], [ <badref>, %ifElseEnd41 ], !dbg !27</div><div>Assertion failed: (use_empty() && "Uses remain when a value is destroyed!"), function ~Value, file /Users/duanbing/Project/llvm/llvm/lib/IR/Value.cpp, line 90.</div></div><div><br></div><div>Can you give me some tips about what's happened or how to debug this?</div><div>Thanks!</div><div><br></div></div></div></div></div></div>