[LLVMdev] Removing dead code
Fernando Magno Quintao Pereira
fernando at CS.UCLA.EDU
Fri Jun 30 10:26:23 PDT 2006
> > It seems to me that the only instructions
> > with dead definitions that I should not remove are the calls. Is it true?
> > I would like to know if a code like this below is safe, that is, besides
> > call instructions, is there other instructions that must stay in the code
> > even if their definitions are dead?
> >
> > MachineInstr * mi = iter;
> > opCode = // get the opcode of mi
> > if(!mi.isCall(opCode)) {
> > mbb.remove(iter);
> > }
>
> You can't do that unless you can prove the instructions don't have side
> effects, which you can't. Higher-level passes will remove dead code. Are
> you seeing a case where dead code is making it down to the codegen level?
>
> -Chris
>
I think so. LLVM is producing code like this one here, before RA:
----------------------------------------------------------------------------
entry (0x8605ba0, LLVM BB @0x8602d30):
%reg1024 = OR4 %r3, %r3
%reg1025 = OR4 %r4, %r4
%reg1026 = LWZ 0, %reg1025
%reg1027 = LIS <ga:.str_1>
%reg1028 = LIS <ga:.str_2>
%reg1029 = LBZ 0, %reg1026
ADJCALLSTACKDOWN 56
%reg1030 = IMPLICIT_DEF_GPR
%reg1031 = LA %reg1027, <ga:.str_1>
%r3 = OR4 %reg1031, %reg1031
BL <ga:printf>, %r3
%reg1032 = OR4 %r3, %r3 <-------------------
%reg1033 = EXTSB %reg1029
%reg1034 = LA %reg1028, <ga:.str_2>
ADJCALLSTACKUP 56
ADJCALLSTACKDOWN 56
%r3 = OR4 %reg1034, %reg1034
%r4 = OR4 %reg1033, %reg1033
BL <ga:printf>, %r3, %r4
%reg1035 = OR4 %r3, %r3
ADJCALLSTACKUP 56
%r3 = OR4 %reg1030, %reg1030
BLR
----------------------------------------------------------- produced from:
#include <stdio.h>
int main(int argc, char ** argv) {
int i;
i = argv[0][0];
printf("Hello, world\n");
printf("i = %d\n", i);
}
--------------------------------------------------------------------------
where %reg1032 is dead. I'm removing these instructions. In Linear scan,
they are removed too. I'm removing all the dead
definitions from instructions that are not function calls, and the
resulting programs seem to work fine. The ratio of these instructions is
about 1:20, that is, for each 20 instructions (in PPC) the RA could remove
1 dead definition.
Fernando
More information about the llvm-dev
mailing list