mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2026-05-06 05:08:08 +02:00
gallivm: make sure that the alloca's are the very first thing in the function
otherwise mem2reg can't put them in registers
This commit is contained in:
parent
625e024b18
commit
012fabca72
1 changed files with 19 additions and 1 deletions
|
|
@ -651,6 +651,19 @@ emit_declaration(
|
|||
unsigned first = decl->Range.First;
|
||||
unsigned last = decl->Range.Last;
|
||||
unsigned idx, i;
|
||||
LLVMBasicBlockRef current_block =
|
||||
LLVMGetInsertBlock(bld->base.builder);
|
||||
LLVMBasicBlockRef first_block =
|
||||
LLVMGetEntryBasicBlock(
|
||||
LLVMGetBasicBlockParent(current_block));
|
||||
LLVMValueRef first_inst =
|
||||
LLVMGetFirstInstruction(first_block);
|
||||
|
||||
/* we want alloca's to be the first instruction
|
||||
* in the function so we need to rewind the builder
|
||||
* to the very beginning */
|
||||
LLVMPositionBuilderBefore(bld->base.builder,
|
||||
first_inst);
|
||||
|
||||
for (idx = first; idx <= last; ++idx) {
|
||||
boolean ok;
|
||||
|
|
@ -673,10 +686,15 @@ emit_declaration(
|
|||
ok = TRUE;
|
||||
}
|
||||
|
||||
if (!ok)
|
||||
if (!ok) {
|
||||
LLVMPositionBuilderAtEnd(bld->base.builder,
|
||||
current_block);
|
||||
return FALSE;
|
||||
}
|
||||
}
|
||||
|
||||
LLVMPositionBuilderAtEnd(bld->base.builder,
|
||||
current_block);
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue