[LLVMdev] Eliminating redundant loads
Dibyendu Majumdar
mobile at majumdar.org.uk
Sun Feb 22 16:44:10 PST 2015
On 22 February 2015 at 22:54, Hal Finkel <hfinkel at anl.gov> wrote:
>> I tried setting the module's DataLayout to the engine's DataLayout.
>> Don't see any improvement.
>> The memcpy() is to perform a struct assign, so I tried replacing that
>> with member by member store.
>> But even then the loads are not being eliminated so I guess the
>> memcpy() isn't the issue.
>
> If you run the IR through opt -O3 do you get the optimization you expect?
>
Hi,
Tried that - no improvement.
Also tried removing the redundant GEP instructions, leaving just the
loads. Here is a dump that shows the output after running the
optimizer passes (this is from the passes in my program not opt -O3;
this version does not use memcpy() either):
%L_ci = getelementptr inbounds %ravi.lua_State* %L, i64 0, i32 6
%0 = load %ravi.CallInfo** %L_ci, align 8
%base = getelementptr inbounds %ravi.CallInfo* %0, i64 0, i32 4, i32 0
%1 = bitcast %ravi.CallInfo* %0 to %ravi.LClosure***
%2 = load %ravi.LClosure*** %1, align 8
%3 = load %ravi.LClosure** %2, align 8
%Proto = getelementptr inbounds %ravi.LClosure* %3, i64 0, i32 5
%4 = load %ravi.Proto** %Proto, align 8
%k = getelementptr inbounds %ravi.Proto* %4, i64 0, i32 14
%5 = load %ravi.TValue** %k, align 8
%6 = load %ravi.TValue** %base, align 8
%srcvalue = getelementptr inbounds %ravi.TValue* %5, i64 0, i32 0, i32 0
%destvalue = getelementptr inbounds %ravi.TValue* %6, i64 0, i32 0, i32 0
%7 = load double* %srcvalue, align 8
store double %7, double* %destvalue, align 8
%srctype = getelementptr inbounds %ravi.TValue* %5, i64 0, i32 1
%desttype = getelementptr inbounds %ravi.TValue* %6, i64 0, i32 1
%8 = load i32* %srctype, align 4
store i32 %8, i32* %desttype, align 4
%9 = load %ravi.TValue** %base, align 8
%srcvalue1 = getelementptr inbounds %ravi.TValue* %5, i64 1, i32 0, i32 0
%destvalue2 = getelementptr inbounds %ravi.TValue* %9, i64 1, i32 0, i32 0
%10 = load double* %srcvalue1, align 8
store double %10, double* %destvalue2, align 8
Regards
Dibyendu
More information about the llvm-dev
mailing list