Skip to content
  • Evan Cheng's avatar
    Teach 2addr pass to be do more commuting. If both uses of a two-address... · abda665f
    Evan Cheng authored
    Teach 2addr pass to be do more commuting. If both uses of a two-address instruction are killed, but the first operand has a use before and after the def, commute if the second operand does not suffer from the same issue.
    %reg1028<def> = EXTRACT_SUBREG %reg1027<kill>, 1                                                                                                                                     
    %reg1029<def> = MOV8rr %reg1028                                                                                                                                                      
    %reg1029<def> = SHR8ri %reg1029, 7, %EFLAGS<imp-def,dead>                                                                                                                            
    insert => %reg1030<def> = MOV8rr %reg1028                                                                                                                                            
    %reg1030<def> = ADD8rr %reg1028<kill>, %reg1029<kill>, %EFLAGS<imp-def,dead>                                                                                                         
    
    In this case, it might not be possible to coalesce the second MOV8rr                                                                                                                 
    instruction if the first one is coalesced. So it would be profitable to                                                                                                              
    commute it:                                                                                                                                                                          
    %reg1028<def> = EXTRACT_SUBREG %reg1027<kill>, 1                                                                                                                                     
    %reg1029<def> = MOV8rr %reg1028                                                                                                                                                      
    %reg1029<def> = SHR8ri %reg1029, 7, %EFLAGS<imp-def,dead>                                                                                                                            
    insert => %reg1030<def> = MOV8rr %reg1029                                                                                                                                            
    %reg1030<def> = ADD8rr %reg1029<kill>, %reg1028<kill>, %EFLAGS<imp-def,dead>
    
    llvm-svn: 62954
    abda665f
Loading