mirror of
https://github.com/c3lang/c3c.git
synced 2026-02-27 03:51:18 +00:00
Check properly has use list.
This commit is contained in:
@@ -1330,7 +1330,7 @@ static void llvm_prune_optional(GenContext *c, LLVMBasicBlockRef discard_fail)
|
||||
// <insert point>
|
||||
|
||||
// Find the use of this block.
|
||||
LLVMUseRef use = LLVMGetFirstUse(block_value);
|
||||
LLVMUseRef use = LLVMHasUseList(block_value) ? LLVMGetFirstUse(block_value) : NULL;
|
||||
if (!use) return;
|
||||
|
||||
LLVMValueRef maybe_br = LLVMGetUser(use);
|
||||
@@ -1356,7 +1356,8 @@ static void llvm_prune_optional(GenContext *c, LLVMBasicBlockRef discard_fail)
|
||||
LLVMInstructionEraseFromParent(maybe_br);
|
||||
|
||||
// Optionally remove the comparison
|
||||
if (!LLVMGetFirstUse(compared))
|
||||
|
||||
if (LLVMHasUseList(compared) && !LLVMGetFirstUse(compared))
|
||||
{
|
||||
LLVMValueRef operand = NULL;
|
||||
if (LLVMGetInstructionOpcode(compared) == LLVMCall)
|
||||
@@ -5255,7 +5256,7 @@ void llvm_emit_parameter(GenContext *c, LLVMValueRef *args, unsigned *arg_count_
|
||||
}
|
||||
LLVMValueRef val = be_value->value;
|
||||
// Maybe it's just created? Let's optimize codegen.
|
||||
if (!LLVMGetFirstUse(val) && LLVMIsAInsertValueInst(val) && LLVMIsAInsertValueInst(
|
||||
if (LLVMHasUseList(val) && !LLVMGetFirstUse(val) && LLVMIsAInsertValueInst(val) && LLVMIsAInsertValueInst(
|
||||
LLVMGetPreviousInstruction(val)))
|
||||
{
|
||||
LLVMValueRef prev = LLVMGetPreviousInstruction(val);
|
||||
|
||||
@@ -75,6 +75,7 @@ bool llvm_link_mingw(const char **args, int arg_count, const char **error_string
|
||||
bool llvm_ar(const char *out_name, const char **args, size_t count, int ArFormat);
|
||||
|
||||
LLVMValueRef LLVMConstBswap(LLVMValueRef ConstantVal);
|
||||
bool LLVMHasUseList(LLVMValueRef value);
|
||||
void LLVMBuilderSetFastMathFlags(LLVMBuilderRef Builder, FastMathOption option);
|
||||
void LLVMSetDSOLocal(LLVMValueRef Global, bool value);
|
||||
void LLVMSetTargetMachineUseInitArray(LLVMTargetMachineRef ref, bool use_init_array);
|
||||
|
||||
@@ -356,6 +356,12 @@ void LLVMBuilderSetFastMathFlags(LLVMBuilderRef Builder, FastMathOption option)
|
||||
llvm::unwrap(Builder)->setFastMathFlags(math_flags);
|
||||
}
|
||||
|
||||
bool LLVMHasUseList(LLVMValueRef value)
|
||||
{
|
||||
llvm::Value *val = llvm::unwrap<llvm::Value>(value);
|
||||
return val->hasUseList();
|
||||
}
|
||||
|
||||
LLVMValueRef LLVMConstBswap(LLVMValueRef ConstantVal)
|
||||
{
|
||||
llvm::Constant *Val = llvm::unwrap<llvm::Constant>(ConstantVal);
|
||||
|
||||
Reference in New Issue
Block a user