Hi Andrew,
Thanks for the feedback.
Here is a reduced testcase derived from a bitfield insertion scenario.
static inline unsigned
rot_insert (unsigned x, unsigned y, unsigned n, unsigned mb, unsigned me)
{
if (n)
x = (x << n) | (x >> (32 - n));
unsigned s = -1;
if (n)
s = (s << n) | (s >> (32 - n));
unsigned mask = 0;
mask += 1U << (31 - mb);
mask += 1U << (31 - mb);
mask -= 1U << (31 - me);
mask -= (mb > me);
if (mask & ~s)
return 12345 * y;
return (x & mask) | (y & ~mask);
}
unsigned foo (unsigned x, unsigned y)
{
return rot_insert (x, y, 1, 31, 31);
}
I’ve tested on Power10 and on my local Apple M3 pro, which i assume has Arm
v8.6-A ISA.
If we allow constants (remove INTEGER_CST check), we regress on both.
Assembly Comparison
————————————
I we include INTEGER_CST check and don’t allow constants, we will have XOR AND
XOR form.. which will produce below asms.
Power10
foo:
.LFB1:
.cfi_startproc
.localentry foo,1
rlwimi 4,3,32-31,31,31
rldicl 3,4,0,32
blr
Aarch64
foo:
LFB1:
bfxil w1, w0, 31, 1
mov w0, w1
ret
And if we remove INTEGER_CST check and allow constants, we will have IOR AND
ANDN form., which produces below asm.
Power10
+2 extra instructions
foo:
.LFB1:
.cfi_startproc
.localentry foo,1
rlwinm 4,4,0,0,30
srwi 3,3,31
or 3,3,4
rldicl 3,3,0,32
blr
Aarch64:
Does not match Bitfield extract and insert semantics.
foo:
LFB1:
and w1, w1, -2
orr w0, w1, w0, lsr 31
ret
For Aarch64, i noticed combine generating below pattern failed to match,
(set (reg/i:SI 0 x0)
(ior:SI (and:SI (reg:SI 112 [ y ])
(const_int -2 [0xfffffffffffffffe]))
(lshiftrt:SI (reg:SI 111 [ x ])
(const_int 31 [0x1f]))))
For which we can write a pattern for bfxil which can emit “bfxil w0, w112, #31,
#1” maybe?
But for RS6000, We hit another issue.
We try to merge 3 instructions,
i1 : (set (reg:SI 126 [ _8 ])
(lshiftrt:SI (subreg:SI (reg:DI 130 [ x ]) 0)
(const_int 31 [0x1f])))
i2 : (set (reg:SI 127)
(and:SI (subreg:SI (reg:DI 131 [ y ]) 0)
(const_int -2 [0xfffffffffffffffe])))
to,
i3 : (set (reg:SI 124 [ _7 ])
(ior:SI (reg:SI 126 [ _8 ])
(reg:SI 127)))
This could have matched just fine, if and only if i1 was the same it was.
But here source of i1,
(lshiftrt:SI (subreg:SI (reg:DI 130 [ x ]) 0)
(const_int 31 [0x1f]))
gets transformed to
(subreg:SI (lshiftrt:DI (reg:DI 130 [ x ])
(const_int 31 [0x1f])) 0).
Because reason being combine performs shift in wider mode.
And later simplify-rtx tries to simplify further and the rtx we endup having,
(set (reg:SI 124 [ _7 ])
(ior:SI (and:SI (subreg:SI (reg:DI 131 [ y ]) 0)
(const_int -2 [0xfffffffffffffffe]))
(subreg:SI (zero_extract:DI (reg:DI 130 [ x ])
(const_int 32 [0x20])
(const_int 1 [0x1])) 0)))
zero_extract, is not allowed in rs6000 backend,
After we try to revert/replace compound zero_extract to normal basic rtx
operations,
we endup having non-matchable code.
(set (reg:SI 124 [ _7 ])
(ior:SI (and:SI (subreg:SI (reg:DI 131 [ y ]) 0)
(const_int -2 [0xfffffffffffffffe]))
(subreg:SI (and:DI (lshiftrt:DI (reg:DI 130 [ x ])
(const_int 31 [0x1f]))
(const_int 4294967295 [0xffffffff])) 0))).
Because the shift logic is now wrapped in (subreg:SI (and:DI (lshiftrt:DI
...))),
the backend patterns for rlwimi (which expect clear SImode operations) no
longer match.
>> This is the part I am not getting. Specifically the whole `+` part and
>> which instructions are being combined.
>>
>> Is it that we originally had:
>> A = RRotate(P, N)
>> T = (A & C)
>> T1 = (B & ~C)
>> R = T | T1
>>
>> And then we get:
>> T = lshiftrt (P, N)
>> T1 = B & ~C
>> R = T | T1
>>
>> Which then is not recognized as inserting P into B starting at N for
>> the bitmask ?
>> But can't that show up even without the andn pattern?
>> Which means there might be a missing rs6000 pattern for this case?
>>
>> Thanks,
>> Andrew
We do have a pattern for that,
4359 (define_insn "*rotlsi3_insert_4"
4360 [(set (match_operand:SI 0 "gpc_reg_operand" "=r")
4361 (ior:SI (and:SI (match_operand:SI 3 "gpc_reg_operand" "0")
4362 (match_operand:SI 4 "const_int_operand" "n"))
4363 (lshiftrt:SI (match_operand:SI 1 "gpc_reg_operand" "r")
4364 (match_operand:SI 2 "const_int_operand"
"n"))))]
4365 "INTVAL (operands[2]) + exact_log2 (-UINTVAL (operands[4])) == 32"
4366 "rlwimi %0,%1,32-%h2,%h2,31"
4367 [(set_attr "type" "insert")])
If we have a form XOR-AND-XOR, which gets transformed to above pattern just
fine via simplify-rtx.cc.
4052 /* If we have (xor (and (xor A B) C) A) with C a constant we can
instead
4053 do (ior (and A ~C) (and B C)) which is a machine instruction on
some
4054 machines, and also has shorter instruction path length. */
Since simplify-rtx handles the XOR-form correctly, restricting this GIMPLE
patch to variables seemed the safest path to avoid these specific Combine
side-effects.
I have attached the combine dumps for reference. I will also work on adding the
GIMPLE testcases and target-supports entries as you requested.
Thanks,
Kishan
;; Function main (main, funcdef_no=1, decl_uid=4601, cgraph_uid=2,
symbol_order=1) (executed once)
scanning new insn with uid = 18.
rescanning insn with uid = 2.
scanning new insn with uid = 19.
rescanning insn with uid = 3.
starting the processing of deferred insns
ending the processing of deferred insns
df_analyze called
df_worklist_dataflow_doublequeue: n_basic_blocks 3 n_edges 2 count 3 ( 1)
main
Dataflow summary:
def_info->table_size = 33, use_info->table_size = 0
;; fully invalidated by EH 0 [x0] 1 [x1] 2 [x2] 3 [x3] 4 [x4] 5 [x5] 6
[x6] 7 [x7] 8 [x8] 9 [x9] 10 [x10] 11 [x11] 12 [x12] 13 [x13] 14 [x14] 15 [x15]
16 [x16] 17 [x17] 30 [x30] 32 [v0] 33 [v1] 34 [v2] 35 [v3] 36 [v4] 37 [v5] 38
[v6] 39 [v7] 48 [v16] 49 [v17] 50 [v18] 51 [v19] 52 [v20] 53 [v21] 54 [v22] 55
[v23] 56 [v24] 57 [v25] 58 [v26] 59 [v27] 60 [v28] 61 [v29] 62 [v30] 63 [v31]
66 [cc] 68 [p0] 69 [p1] 70 [p2] 71 [p3] 72 [p4] 73 [p5] 74 [p6] 75 [p7] 76 [p8]
77 [p9] 78 [p10] 79 [p11] 80 [p12] 81 [p13] 82 [p14] 83 [p15] 84 [fpmr] 85
[ffr] 86 [ffrt]
;; hardware regs used 31 [sp] 64 [sfp] 65 [ap]
;; regular block artificial uses 29 [x29] 31 [sp] 64 [sfp] 65 [ap]
;; eh block artificial uses 29 [x29] 31 [sp] 64 [sfp] 65 [ap]
;; entry block defs 0 [x0] 1 [x1] 2 [x2] 3 [x3] 4 [x4] 5 [x5] 6 [x6] 7
[x7] 8 [x8] 29 [x29] 30 [x30] 31 [sp] 32 [v0] 33 [v1] 34 [v2] 35 [v3] 36 [v4]
37 [v5] 38 [v6] 39 [v7] 64 [sfp] 65 [ap] 68 [p0] 69 [p1] 70 [p2] 71 [p3]
;; exit block uses 0 [x0] 29 [x29] 31 [sp] 64 [sfp]
;; regs ever live 0 [x0] 1 [x1]
;; ref usage r0={2d,3u} r1={1d,1u} r2={1d} r3={1d} r4={1d} r5={1d} r6={1d}
r7={1d} r8={1d} r29={1d,2u} r30={1d} r31={1d,2u} r32={1d} r33={1d} r34={1d}
r35={1d} r36={1d} r37={1d} r38={1d} r39={1d} r64={1d,2u} r65={1d,1u} r68={1d}
r69={1d} r70={1d} r71={1d} r105={1d,1u} r106={1d,2u} r107={1d,1u} r108={1d,1u}
r109={1d,1u} r110={1d,1u} r111={1d,1u} r112={1d,1u}
;; total ref usage 55{35d,20u,0e} in 10{10 regular + 0 call} insns.
( )->[0]->( 2 )
;; bb 0 artificial_defs: { d1(0){ }d2(1){ }d3(2){ }d4(3){ }d5(4){ }d6(5){
}d7(6){ }d8(7){ }d9(8){ }d10(29){ }d11(30){ }d12(31){ }d13(32){ }d14(33){
}d15(34){ }d16(35){ }d17(36){ }d18(37){ }d19(38){ }d20(39){ }d21(64){ }d22(65){
}d23(68){ }d24(69){ }d25(70){ }d26(71){ }}
;; bb 0 artificial_uses: { }
;; lr in
;; lr use
;; lr def 0 [x0] 1 [x1] 2 [x2] 3 [x3] 4 [x4] 5 [x5] 6 [x6] 7 [x7] 8 [x8]
29 [x29] 30 [x30] 31 [sp] 32 [v0] 33 [v1] 34 [v2] 35 [v3] 36 [v4] 37 [v5] 38
[v6] 39 [v7] 64 [sfp] 65 [ap] 68 [p0] 69 [p1] 70 [p2] 71 [p3]
;; live in
;; live gen 0 [x0] 1 [x1] 2 [x2] 3 [x3] 4 [x4] 5 [x5] 6 [x6] 7 [x7] 8 [x8]
29 [x29] 30 [x30] 31 [sp] 32 [v0] 33 [v1] 34 [v2] 35 [v3] 36 [v4] 37 [v5] 38
[v6] 39 [v7] 64 [sfp] 65 [ap] 68 [p0] 69 [p1] 70 [p2] 71 [p3]
;; live kill
;; lr out 0 [x0] 1 [x1] 29 [x29] 31 [sp] 64 [sfp] 65 [ap]
;; live out 0 [x0] 1 [x1] 29 [x29] 31 [sp] 64 [sfp] 65 [ap]
( 0 )->[2]->( 1 )
;; bb 2 artificial_defs: { }
;; bb 2 artificial_uses: { u-1(29){ }u-1(31){ }u-1(64){ }u-1(65){ }}
;; lr in 0 [x0] 1 [x1] 29 [x29] 31 [sp] 64 [sfp] 65 [ap]
;; lr use 0 [x0] 1 [x1] 29 [x29] 31 [sp] 64 [sfp] 65 [ap]
;; lr def 0 [x0] 105 106 107 108 109 110 111 112
;; live in 0 [x0] 1 [x1] 29 [x29] 31 [sp] 64 [sfp] 65 [ap]
;; live gen 0 [x0] 105 106 107 108 109 110
;; live kill
;; lr out 0 [x0] 29 [x29] 31 [sp] 64 [sfp] 65 [ap]
;; live out 0 [x0] 29 [x29] 31 [sp] 64 [sfp] 65 [ap]
( 2 )->[1]->( )
;; bb 1 artificial_defs: { }
;; bb 1 artificial_uses: { u-1(0){ }u-1(29){ }u-1(31){ }u-1(64){ }}
;; lr in 0 [x0] 29 [x29] 31 [sp] 64 [sfp]
;; lr use 0 [x0] 29 [x29] 31 [sp] 64 [sfp]
;; lr def
;; live in 0 [x0] 29 [x29] 31 [sp] 64 [sfp]
;; live gen
;; live kill
;; lr out
;; live out
Finding needed instructions:
Adding insn 16 to worklist
Finished finding needed instructions:
processing block 2 lr out = 0 [x0] 29 [x29] 31 [sp] 64 [sfp] 65 [ap]
Adding insn 15 to worklist
Adding insn 10 to worklist
Adding insn 9 to worklist
Adding insn 8 to worklist
Adding insn 7 to worklist
Adding insn 3 to worklist
Adding insn 19 to worklist
Adding insn 2 to worklist
Adding insn 18 to worklist
df_worklist_dataflow_doublequeue: n_basic_blocks 3 n_edges 2 count 3 ( 1)
insn_cost 4 for 18: r111:SI=x0:SI
REG_DEAD x0:SI
insn_cost 4 for 2: r105:SI=r111:SI
REG_DEAD r111:SI
insn_cost 4 for 19: r112:SI=x1:SI
REG_DEAD x1:SI
insn_cost 4 for 3: r106:SI=r112:SI
REG_DEAD r112:SI
insn_cost 4 for 7: r108:SI=r105:SI<-<0x1
REG_DEAD r105:SI
insn_cost 4 for 8: r109:SI=r108:SI^r106:SI
REG_DEAD r108:SI
insn_cost 4 for 9: r110:SI=r109:SI&0x1
REG_DEAD r109:SI
insn_cost 4 for 10: r107:SI=r110:SI^r106:SI
REG_DEAD r110:SI
REG_DEAD r106:SI
insn_cost 4 for 15: x0:SI=r107:SI
REG_DEAD r107:SI
insn_cost 0 for 16: use x0:SI
Trying 2 -> 7:
2: r105:SI=r111:SI
REG_DEAD r111:SI
7: r108:SI=r105:SI<-<0x1
REG_DEAD r105:SI
Successfully matched this instruction:
(set (reg:SI 108 [ x_4 ])
(rotate:SI (reg:SI 111 [ x ])
(const_int 1 [0x1])))
allowing combination of insns 2 and 7
original costs 4 + 4 = 8
replacement cost 4
deferring deletion of insn with uid = 2.
modifying insn i3 7: r108:SI=r111:SI<-<0x1
REG_DEAD r111:SI
deferring rescan insn with uid = 7.
Trying 3 -> 8:
3: r106:SI=r112:SI
REG_DEAD r112:SI
8: r109:SI=r108:SI^r106:SI
REG_DEAD r108:SI
Failed to match this instruction:
(parallel [
(set (reg:SI 109 [ _5 ])
(xor:SI (reg:SI 108 [ x_4 ])
(reg:SI 112 [ y ])))
(set (reg/v:SI 106 [ y ])
(reg:SI 112 [ y ]))
])
Failed to match this instruction:
(parallel [
(set (reg:SI 109 [ _5 ])
(xor:SI (reg:SI 108 [ x_4 ])
(reg:SI 112 [ y ])))
(set (reg/v:SI 106 [ y ])
(reg:SI 112 [ y ]))
])
Trying 7 -> 8:
7: r108:SI=r111:SI<-<0x1
REG_DEAD r111:SI
8: r109:SI=r108:SI^r106:SI
REG_DEAD r108:SI
Successfully matched this instruction:
(set (reg:SI 109 [ _5 ])
(xor:SI (rotate:SI (reg:SI 111 [ x ])
(const_int 1 [0x1]))
(reg/v:SI 106 [ y ])))
allowing combination of insns 7 and 8
original costs 4 + 4 = 8
replacement cost 4
deferring deletion of insn with uid = 7.
modifying insn i3 8: r109:SI=r111:SI<-<0x1^r106:SI
REG_DEAD r111:SI
deferring rescan insn with uid = 8.
Trying 3 -> 8:
3: r106:SI=r112:SI
REG_DEAD r112:SI
8: r109:SI=r111:SI<-<0x1^r106:SI
REG_DEAD r111:SI
Failed to match this instruction:
(parallel [
(set (reg:SI 109 [ _5 ])
(xor:SI (rotate:SI (reg:SI 111 [ x ])
(const_int 1 [0x1]))
(reg:SI 112 [ y ])))
(set (reg/v:SI 106 [ y ])
(reg:SI 112 [ y ]))
])
Failed to match this instruction:
(parallel [
(set (reg:SI 109 [ _5 ])
(xor:SI (rotate:SI (reg:SI 111 [ x ])
(const_int 1 [0x1]))
(reg:SI 112 [ y ])))
(set (reg/v:SI 106 [ y ])
(reg:SI 112 [ y ]))
])
Trying 8 -> 9:
8: r109:SI=r111:SI<-<0x1^r106:SI
REG_DEAD r111:SI
9: r110:SI=r109:SI&0x1
REG_DEAD r109:SI
Failed to match this instruction:
(set (reg:SI 110 [ _6 ])
(and:SI (xor:SI (rotate:SI (reg:SI 111 [ x ])
(const_int 1 [0x1]))
(reg/v:SI 106 [ y ]))
(const_int 1 [0x1])))
Trying 3, 8 -> 9:
3: r106:SI=r112:SI
REG_DEAD r112:SI
8: r109:SI=r111:SI<-<0x1^r106:SI
REG_DEAD r111:SI
9: r110:SI=r109:SI&0x1
REG_DEAD r109:SI
Failed to match this instruction:
(parallel [
(set (reg:SI 110 [ _6 ])
(and:SI (xor:SI (rotate:SI (reg:SI 111 [ x ])
(const_int 1 [0x1]))
(reg:SI 112 [ y ]))
(const_int 1 [0x1])))
(set (reg/v:SI 106 [ y ])
(reg:SI 112 [ y ]))
])
Failed to match this instruction:
(parallel [
(set (reg:SI 110 [ _6 ])
(and:SI (xor:SI (rotate:SI (reg:SI 111 [ x ])
(const_int 1 [0x1]))
(reg:SI 112 [ y ]))
(const_int 1 [0x1])))
(set (reg/v:SI 106 [ y ])
(reg:SI 112 [ y ]))
])
Successfully matched this instruction:
(set (reg/v:SI 106 [ y ])
(reg:SI 112 [ y ]))
Failed to match this instruction:
(set (reg:SI 110 [ _6 ])
(and:SI (xor:SI (rotate:SI (reg:SI 111 [ x ])
(const_int 1 [0x1]))
(reg:SI 112 [ y ]))
(const_int 1 [0x1])))
Trying 9 -> 10:
9: r110:SI=r109:SI&0x1
REG_DEAD r109:SI
10: r107:SI=r110:SI^r106:SI
REG_DEAD r110:SI
REG_DEAD r106:SI
Failed to match this instruction:
(set (reg:SI 107 [ _7 ])
(xor:SI (and:SI (reg:SI 109 [ _5 ])
(const_int 1 [0x1]))
(reg/v:SI 106 [ y ])))
Trying 8, 9 -> 10:
8: r109:SI=r111:SI<-<0x1^r106:SI
REG_DEAD r111:SI
9: r110:SI=r109:SI&0x1
REG_DEAD r109:SI
10: r107:SI=r110:SI^r106:SI
REG_DEAD r110:SI
REG_DEAD r106:SI
Successfully matched this instruction:
(set (reg:SI 107 [ _7 ])
(ior:SI (and:SI (reg/v:SI 106 [ y ])
(const_int -2 [0xfffffffffffffffe]))
(subreg:SI (zero_extract:DI (subreg:DI (reg:SI 111 [ x ]) 0)
(const_int 1 [0x1])
(const_int 31 [0x1f])) 0)))
allowing combination of insns 8, 9 and 10
original costs 4 + 4 + 4 = 12
replacement cost 12
deferring deletion of insn with uid = 9.
deferring deletion of insn with uid = 8.
modifying insn i3 10:
r107:SI=r106:SI&0xfffffffffffffffe|zero_extract(r111:SI#0,0x1,0x1f)#0
REG_DEAD r111:SI
REG_DEAD r106:SI
deferring rescan insn with uid = 10.
Trying 3 -> 10:
3: r106:SI=r112:SI
REG_DEAD r112:SI
10: r107:SI=r106:SI&0xfffffffffffffffe|zero_extract(r111:SI#0,0x1,0x1f)#0
REG_DEAD r111:SI
REG_DEAD r106:SI
Failed to match this instruction:
(set (reg:SI 107 [ _7 ])
(ior:SI (and:SI (reg:SI 112 [ y ])
(const_int -2 [0xfffffffffffffffe]))
(lshiftrt:SI (reg:SI 111 [ x ])
(const_int 31 [0x1f]))))
Trying 10 -> 15:
10: r107:SI=r106:SI&0xfffffffffffffffe|zero_extract(r111:SI#0,0x1,0x1f)#0
REG_DEAD r111:SI
REG_DEAD r106:SI
15: x0:SI=r107:SI
REG_DEAD r107:SI
Failed to match this instruction:
(set (reg/i:SI 0 x0)
(ior:SI (and:SI (reg/v:SI 106 [ y ])
(const_int -2 [0xfffffffffffffffe]))
(lshiftrt:SI (reg:SI 111 [ x ])
(const_int 31 [0x1f]))))
Trying 3, 10 -> 15:
3: r106:SI=r112:SI
REG_DEAD r112:SI
10: r107:SI=r106:SI&0xfffffffffffffffe|zero_extract(r111:SI#0,0x1,0x1f)#0
REG_DEAD r111:SI
REG_DEAD r106:SI
15: x0:SI=r107:SI
REG_DEAD r107:SI
Failed to match this instruction:
(set (reg/i:SI 0 x0)
(ior:SI (and:SI (reg:SI 112 [ y ])
(const_int -2 [0xfffffffffffffffe]))
(lshiftrt:SI (reg:SI 111 [ x ])
(const_int 31 [0x1f]))))
Successfully matched this instruction:
(set (reg:SI 107 [ _7 ])
(lshiftrt:SI (reg:SI 111 [ x ])
(const_int 31 [0x1f])))
Failed to match this instruction:
(set (reg/i:SI 0 x0)
(ior:SI (and:SI (reg:SI 112 [ y ])
(const_int -2 [0xfffffffffffffffe]))
(reg:SI 107 [ _7 ])))
Trying 15 -> 16:
15: x0:SI=r107:SI
REG_DEAD r107:SI
16: use x0:SI
Failed to match this instruction:
(parallel [
(use (reg:SI 107 [ _7 ]))
(set (reg/i:SI 0 x0)
(reg:SI 107 [ _7 ]))
])
Failed to match this instruction:
(parallel [
(use (reg:SI 107 [ _7 ]))
(set (reg/i:SI 0 x0)
(reg:SI 107 [ _7 ]))
])
Trying 10, 15 -> 16:
10: r107:SI=r106:SI&0xfffffffffffffffe|zero_extract(r111:SI#0,0x1,0x1f)#0
REG_DEAD r111:SI
REG_DEAD r106:SI
15: x0:SI=r107:SI
REG_DEAD r107:SI
16: use x0:SI
Failed to match this instruction:
(parallel [
(use (ior:SI (and:SI (reg/v:SI 106 [ y ])
(const_int -2 [0xfffffffffffffffe]))
(lshiftrt:SI (reg:SI 111 [ x ])
(const_int 31 [0x1f]))))
(set (reg/i:SI 0 x0)
(ior:SI (and:SI (reg/v:SI 106 [ y ])
(const_int -2 [0xfffffffffffffffe]))
(lshiftrt:SI (reg:SI 111 [ x ])
(const_int 31 [0x1f]))))
])
Failed to match this instruction:
(parallel [
(use (ior:SI (and:SI (reg/v:SI 106 [ y ])
(const_int -2 [0xfffffffffffffffe]))
(lshiftrt:SI (reg:SI 111 [ x ])
(const_int 31 [0x1f]))))
(set (reg/i:SI 0 x0)
(ior:SI (and:SI (reg/v:SI 106 [ y ])
(const_int -2 [0xfffffffffffffffe]))
(lshiftrt:SI (reg:SI 111 [ x ])
(const_int 31 [0x1f]))))
])
starting the processing of deferred insns
rescanning insn with uid = 10.
ending the processing of deferred insns
main
Dataflow summary:
;; fully invalidated by EH 0 [x0] 1 [x1] 2 [x2] 3 [x3] 4 [x4] 5 [x5] 6
[x6] 7 [x7] 8 [x8] 9 [x9] 10 [x10] 11 [x11] 12 [x12] 13 [x13] 14 [x14] 15 [x15]
16 [x16] 17 [x17] 30 [x30] 32 [v0] 33 [v1] 34 [v2] 35 [v3] 36 [v4] 37 [v5] 38
[v6] 39 [v7] 48 [v16] 49 [v17] 50 [v18] 51 [v19] 52 [v20] 53 [v21] 54 [v22] 55
[v23] 56 [v24] 57 [v25] 58 [v26] 59 [v27] 60 [v28] 61 [v29] 62 [v30] 63 [v31]
66 [cc] 68 [p0] 69 [p1] 70 [p2] 71 [p3] 72 [p4] 73 [p5] 74 [p6] 75 [p7] 76 [p8]
77 [p9] 78 [p10] 79 [p11] 80 [p12] 81 [p13] 82 [p14] 83 [p15] 84 [fpmr] 85
[ffr] 86 [ffrt]
;; hardware regs used 31 [sp] 64 [sfp] 65 [ap]
;; regular block artificial uses 29 [x29] 31 [sp] 64 [sfp] 65 [ap]
;; eh block artificial uses 29 [x29] 31 [sp] 64 [sfp] 65 [ap]
;; entry block defs 0 [x0] 1 [x1] 2 [x2] 3 [x3] 4 [x4] 5 [x5] 6 [x6] 7
[x7] 8 [x8] 29 [x29] 30 [x30] 31 [sp] 32 [v0] 33 [v1] 34 [v2] 35 [v3] 36 [v4]
37 [v5] 38 [v6] 39 [v7] 64 [sfp] 65 [ap] 68 [p0] 69 [p1] 70 [p2] 71 [p3]
;; exit block uses 0 [x0] 29 [x29] 31 [sp] 64 [sfp]
;; regs ever live 0 [x0] 1 [x1]
;; ref usage r0={2d,3u} r1={1d,1u} r2={1d} r3={1d} r4={1d} r5={1d} r6={1d}
r7={1d} r8={1d} r29={1d,2u} r30={1d} r31={1d,2u} r32={1d} r33={1d} r34={1d}
r35={1d} r36={1d} r37={1d} r38={1d} r39={1d} r64={1d,2u} r65={1d,1u} r68={1d}
r69={1d} r70={1d} r71={1d} r106={1d,1u} r107={1d,1u} r111={1d,1u} r112={1d,1u}
;; total ref usage 46{31d,15u,0e} in 6{6 regular + 0 call} insns.
;; basic block 2, loop depth 0, count 1073741824 (estimated locally, freq
1.0000), maybe hot
;; prev block 0, next block 1, flags: (RTL, MODIFIED)
;; pred: ENTRY [always] count:1073741824 (estimated locally, freq
1.0000) (FALLTHRU)
;; bb 2 artificial_defs: { }
;; bb 2 artificial_uses: { u-1(29){ }u-1(31){ }u-1(64){ }u-1(65){ }}
;; lr in 0 [x0] 1 [x1] 29 [x29] 31 [sp] 64 [sfp] 65 [ap]
;; lr use 0 [x0] 1 [x1] 29 [x29] 31 [sp] 64 [sfp] 65 [ap]
;; lr def 0 [x0] 105 106 107 108 109 110 111 112
;; live in 0 [x0] 1 [x1] 29 [x29] 31 [sp] 64 [sfp] 65 [ap]
;; live gen 0 [x0] 105 106 107 108 109 110 111 112
;; live kill
(note 5 0 18 2 [bb 2] NOTE_INSN_BASIC_BLOCK)
(insn 18 5 2 2 (set (reg:SI 111 [ x ])
(reg:SI 0 x0 [ x ])) "../testcase/testcase.c":39:39 -1
(expr_list:REG_DEAD (reg:SI 0 x0 [ x ])
(nil)))
(note 2 18 19 2 NOTE_INSN_DELETED)
(insn 19 2 3 2 (set (reg:SI 112 [ y ])
(reg:SI 1 x1 [ y ])) "../testcase/testcase.c":39:39 -1
(expr_list:REG_DEAD (reg:SI 1 x1 [ y ])
(nil)))
(insn 3 19 4 2 (set (reg/v:SI 106 [ y ])
(reg:SI 112 [ y ])) "../testcase/testcase.c":39:39 104 {*movsi_aarch64}
(expr_list:REG_DEAD (reg:SI 112 [ y ])
(nil)))
(note 4 3 7 2 NOTE_INSN_FUNCTION_BEG)
(note 7 4 8 2 NOTE_INSN_DELETED)
(note 8 7 9 2 NOTE_INSN_DELETED)
(note 9 8 10 2 NOTE_INSN_DELETED)
(insn 10 9 15 2 (set (reg:SI 107 [ _7 ])
(ior:SI (and:SI (reg/v:SI 106 [ y ])
(const_int -2 [0xfffffffffffffffe]))
(subreg:SI (zero_extract:DI (subreg:DI (reg:SI 111 [ x ]) 0)
(const_int 1 [0x1])
(const_int 31 [0x1f])) 0))) "../testcase/testcase.c":35:20
911 {*aarch64_bfxilsi_extrdi}
(expr_list:REG_DEAD (reg:SI 111 [ x ])
(expr_list:REG_DEAD (reg/v:SI 106 [ y ])
(nil))))
(insn 15 10 16 2 (set (reg/i:SI 0 x0)
(reg:SI 107 [ _7 ])) "../testcase/testcase.c":41:1 104 {*movsi_aarch64}
(expr_list:REG_DEAD (reg:SI 107 [ _7 ])
(nil)))
(insn 16 15 0 2 (use (reg/i:SI 0 x0)) "../testcase/testcase.c":41:1 -1
(nil))
;; succ: EXIT [always] count:1073741824 (estimated locally, freq
1.0000) (FALLTHRU)
;; lr out 0 [x0] 29 [x29] 31 [sp] 64 [sfp] 65 [ap]
;; live out 0 [x0] 29 [x29] 31 [sp] 64 [sfp] 65 [ap]
;; Function main (main, funcdef_no=1, decl_uid=4601, cgraph_uid=2,
symbol_order=1) (executed once)
scanning new insn with uid = 19.
rescanning insn with uid = 2.
scanning new insn with uid = 20.
rescanning insn with uid = 3.
starting the processing of deferred insns
ending the processing of deferred insns
df_analyze called
df_worklist_dataflow_doublequeue: n_basic_blocks 3 n_edges 2 count 3 ( 1)
main
Dataflow summary:
def_info->table_size = 33, use_info->table_size = 0
;; fully invalidated by EH 0 [x0] 1 [x1] 2 [x2] 3 [x3] 4 [x4] 5 [x5] 6
[x6] 7 [x7] 8 [x8] 9 [x9] 10 [x10] 11 [x11] 12 [x12] 13 [x13] 14 [x14] 15 [x15]
16 [x16] 17 [x17] 30 [x30] 32 [v0] 33 [v1] 34 [v2] 35 [v3] 36 [v4] 37 [v5] 38
[v6] 39 [v7] 48 [v16] 49 [v17] 50 [v18] 51 [v19] 52 [v20] 53 [v21] 54 [v22] 55
[v23] 56 [v24] 57 [v25] 58 [v26] 59 [v27] 60 [v28] 61 [v29] 62 [v30] 63 [v31]
66 [cc] 68 [p0] 69 [p1] 70 [p2] 71 [p3] 72 [p4] 73 [p5] 74 [p6] 75 [p7] 76 [p8]
77 [p9] 78 [p10] 79 [p11] 80 [p12] 81 [p13] 82 [p14] 83 [p15] 84 [fpmr] 85
[ffr] 86 [ffrt]
;; hardware regs used 31 [sp] 64 [sfp] 65 [ap]
;; regular block artificial uses 29 [x29] 31 [sp] 64 [sfp] 65 [ap]
;; eh block artificial uses 29 [x29] 31 [sp] 64 [sfp] 65 [ap]
;; entry block defs 0 [x0] 1 [x1] 2 [x2] 3 [x3] 4 [x4] 5 [x5] 6 [x6] 7
[x7] 8 [x8] 29 [x29] 30 [x30] 31 [sp] 32 [v0] 33 [v1] 34 [v2] 35 [v3] 36 [v4]
37 [v5] 38 [v6] 39 [v7] 64 [sfp] 65 [ap] 68 [p0] 69 [p1] 70 [p2] 71 [p3]
;; exit block uses 0 [x0] 29 [x29] 31 [sp] 64 [sfp]
;; regs ever live 0 [x0] 1 [x1]
;; ref usage r0={2d,3u} r1={1d,1u} r2={1d} r3={1d} r4={1d} r5={1d} r6={1d}
r7={1d} r8={1d} r29={1d,2u} r30={1d} r31={1d,2u} r32={1d} r33={1d} r34={1d}
r35={1d} r36={1d} r37={1d} r38={1d} r39={1d} r64={1d,2u} r65={1d,1u} r68={1d}
r69={1d} r70={1d} r71={1d} r105={1d,1u} r106={1d,1u} r107={1d,1u} r108={1d,1u}
r109={1d,1u} r110={1d,1u} r112={1d,1u} r113={1d,1u}
;; total ref usage 54{35d,19u,0e} in 10{10 regular + 0 call} insns.
( )->[0]->( 2 )
;; bb 0 artificial_defs: { d1(0){ }d2(1){ }d3(2){ }d4(3){ }d5(4){ }d6(5){
}d7(6){ }d8(7){ }d9(8){ }d10(29){ }d11(30){ }d12(31){ }d13(32){ }d14(33){
}d15(34){ }d16(35){ }d17(36){ }d18(37){ }d19(38){ }d20(39){ }d21(64){ }d22(65){
}d23(68){ }d24(69){ }d25(70){ }d26(71){ }}
;; bb 0 artificial_uses: { }
;; lr in
;; lr use
;; lr def 0 [x0] 1 [x1] 2 [x2] 3 [x3] 4 [x4] 5 [x5] 6 [x6] 7 [x7] 8 [x8]
29 [x29] 30 [x30] 31 [sp] 32 [v0] 33 [v1] 34 [v2] 35 [v3] 36 [v4] 37 [v5] 38
[v6] 39 [v7] 64 [sfp] 65 [ap] 68 [p0] 69 [p1] 70 [p2] 71 [p3]
;; live in
;; live gen 0 [x0] 1 [x1] 2 [x2] 3 [x3] 4 [x4] 5 [x5] 6 [x6] 7 [x7] 8 [x8]
29 [x29] 30 [x30] 31 [sp] 32 [v0] 33 [v1] 34 [v2] 35 [v3] 36 [v4] 37 [v5] 38
[v6] 39 [v7] 64 [sfp] 65 [ap] 68 [p0] 69 [p1] 70 [p2] 71 [p3]
;; live kill
;; lr out 0 [x0] 1 [x1] 29 [x29] 31 [sp] 64 [sfp] 65 [ap]
;; live out 0 [x0] 1 [x1] 29 [x29] 31 [sp] 64 [sfp] 65 [ap]
( 0 )->[2]->( 1 )
;; bb 2 artificial_defs: { }
;; bb 2 artificial_uses: { u-1(29){ }u-1(31){ }u-1(64){ }u-1(65){ }}
;; lr in 0 [x0] 1 [x1] 29 [x29] 31 [sp] 64 [sfp] 65 [ap]
;; lr use 0 [x0] 1 [x1] 29 [x29] 31 [sp] 64 [sfp] 65 [ap]
;; lr def 0 [x0] 105 106 107 108 109 110 112 113
;; live in 0 [x0] 1 [x1] 29 [x29] 31 [sp] 64 [sfp] 65 [ap]
;; live gen 0 [x0] 105 106 107 108 109 110
;; live kill
;; lr out 0 [x0] 29 [x29] 31 [sp] 64 [sfp] 65 [ap]
;; live out 0 [x0] 29 [x29] 31 [sp] 64 [sfp] 65 [ap]
( 2 )->[1]->( )
;; bb 1 artificial_defs: { }
;; bb 1 artificial_uses: { u-1(0){ }u-1(29){ }u-1(31){ }u-1(64){ }}
;; lr in 0 [x0] 29 [x29] 31 [sp] 64 [sfp]
;; lr use 0 [x0] 29 [x29] 31 [sp] 64 [sfp]
;; lr def
;; live in 0 [x0] 29 [x29] 31 [sp] 64 [sfp]
;; live gen
;; live kill
;; lr out
;; live out
Finding needed instructions:
Adding insn 17 to worklist
Finished finding needed instructions:
processing block 2 lr out = 0 [x0] 29 [x29] 31 [sp] 64 [sfp] 65 [ap]
Adding insn 16 to worklist
Adding insn 11 to worklist
Adding insn 10 to worklist
Adding insn 8 to worklist
Adding insn 7 to worklist
Adding insn 3 to worklist
Adding insn 20 to worklist
Adding insn 2 to worklist
Adding insn 19 to worklist
df_worklist_dataflow_doublequeue: n_basic_blocks 3 n_edges 2 count 3 ( 1)
insn_cost 4 for 19: r112:SI=x0:SI
REG_DEAD x0:SI
insn_cost 4 for 2: r105:SI=r112:SI
REG_DEAD r112:SI
insn_cost 4 for 20: r113:SI=x1:SI
REG_DEAD x1:SI
insn_cost 4 for 3: r106:SI=r113:SI
REG_DEAD r113:SI
insn_cost 4 for 7: r108:SI=r105:SI<-<0x1
REG_DEAD r105:SI
insn_cost 4 for 8: r109:SI=r108:SI&0x1
REG_DEAD r108:SI
insn_cost 4 for 10: r110:SI=r106:SI&0xfffffffffffffffe
REG_DEAD r106:SI
insn_cost 4 for 11: r107:SI=r109:SI|r110:SI
REG_DEAD r110:SI
REG_DEAD r109:SI
insn_cost 4 for 16: x0:SI=r107:SI
REG_DEAD r107:SI
insn_cost 0 for 17: use x0:SI
Trying 2 -> 7:
2: r105:SI=r112:SI
REG_DEAD r112:SI
7: r108:SI=r105:SI<-<0x1
REG_DEAD r105:SI
Successfully matched this instruction:
(set (reg:SI 108 [ x_4 ])
(rotate:SI (reg:SI 112 [ x ])
(const_int 1 [0x1])))
allowing combination of insns 2 and 7
original costs 4 + 4 = 8
replacement cost 4
deferring deletion of insn with uid = 2.
modifying insn i3 7: r108:SI=r112:SI<-<0x1
REG_DEAD r112:SI
deferring rescan insn with uid = 7.
Trying 7 -> 8:
7: r108:SI=r112:SI<-<0x1
REG_DEAD r112:SI
8: r109:SI=r108:SI&0x1
REG_DEAD r108:SI
Successfully matched this instruction:
(set (subreg:DI (reg:SI 109 [ _8 ]) 0)
(zero_extract:DI (subreg:DI (reg:SI 112 [ x ]) 0)
(const_int 1 [0x1])
(const_int 31 [0x1f])))
allowing combination of insns 7 and 8
original costs 4 + 4 = 8
replacement cost 4
deferring deletion of insn with uid = 7.
modifying insn i3 8: r109:SI#0=zero_extract(r112:SI#0,0x1,0x1f)
REG_DEAD r112:SI
deferring rescan insn with uid = 8.
Trying 3 -> 10:
3: r106:SI=r113:SI
REG_DEAD r113:SI
10: r110:SI=r106:SI&0xfffffffffffffffe
REG_DEAD r106:SI
Successfully matched this instruction:
(set (reg:SI 110)
(and:SI (reg:SI 113 [ y ])
(const_int -2 [0xfffffffffffffffe])))
allowing combination of insns 3 and 10
original costs 4 + 4 = 8
replacement cost 4
deferring deletion of insn with uid = 3.
modifying insn i3 10: r110:SI=r113:SI&0xfffffffffffffffe
REG_DEAD r113:SI
deferring rescan insn with uid = 10.
Trying 8 -> 11:
8: r109:SI#0=zero_extract(r112:SI#0,0x1,0x1f)
REG_DEAD r112:SI
11: r107:SI=r109:SI|r110:SI
REG_DEAD r110:SI
REG_DEAD r109:SI
Successfully matched this instruction:
(set (reg:SI 107 [ _7 ])
(ior:SI (lshiftrt:SI (reg:SI 112 [ x ])
(const_int 31 [0x1f]))
(reg:SI 110)))
allowing combination of insns 8 and 11
original costs 4 + 4 = 8
replacement cost 4
deferring deletion of insn with uid = 8.
modifying insn i3 11: r107:SI=r112:SI 0>>0x1f|r110:SI
REG_DEAD r112:SI
REG_DEAD r110:SI
deferring rescan insn with uid = 11.
Trying 10 -> 11:
10: r110:SI=r113:SI&0xfffffffffffffffe
REG_DEAD r113:SI
11: r107:SI=r112:SI 0>>0x1f|r110:SI
REG_DEAD r112:SI
REG_DEAD r110:SI
Failed to match this instruction:
(set (reg:SI 107 [ _7 ])
(ior:SI (and:SI (reg:SI 113 [ y ])
(const_int -2 [0xfffffffffffffffe]))
(lshiftrt:SI (reg:SI 112 [ x ])
(const_int 31 [0x1f]))))
Trying 11 -> 16:
11: r107:SI=r112:SI 0>>0x1f|r110:SI
REG_DEAD r112:SI
REG_DEAD r110:SI
16: x0:SI=r107:SI
REG_DEAD r107:SI
Successfully matched this instruction:
(set (reg/i:SI 0 x0)
(ior:SI (lshiftrt:SI (reg:SI 112 [ x ])
(const_int 31 [0x1f]))
(reg:SI 110)))
allowing combination of insns 11 and 16
original costs 4 + 4 = 8
replacement cost 4
deferring deletion of insn with uid = 11.
modifying insn i3 16: x0:SI=r112:SI 0>>0x1f|r110:SI
REG_DEAD r110:SI
REG_DEAD r112:SI
deferring rescan insn with uid = 16.
Trying 10 -> 16:
10: r110:SI=r113:SI&0xfffffffffffffffe
REG_DEAD r113:SI
16: x0:SI=r112:SI 0>>0x1f|r110:SI
REG_DEAD r110:SI
REG_DEAD r112:SI
Failed to match this instruction:
(set (reg/i:SI 0 x0)
(ior:SI (and:SI (reg:SI 113 [ y ])
(const_int -2 [0xfffffffffffffffe]))
(lshiftrt:SI (reg:SI 112 [ x ])
(const_int 31 [0x1f]))))
Trying 16 -> 17:
16: x0:SI=r112:SI 0>>0x1f|r110:SI
REG_DEAD r110:SI
REG_DEAD r112:SI
17: use x0:SI
Failed to match this instruction:
(parallel [
(use (ior:SI (lshiftrt:SI (reg:SI 112 [ x ])
(const_int 31 [0x1f]))
(reg:SI 110)))
(set (reg/i:SI 0 x0)
(ior:SI (lshiftrt:SI (reg:SI 112 [ x ])
(const_int 31 [0x1f]))
(reg:SI 110)))
])
Failed to match this instruction:
(parallel [
(use (ior:SI (lshiftrt:SI (reg:SI 112 [ x ])
(const_int 31 [0x1f]))
(reg:SI 110)))
(set (reg/i:SI 0 x0)
(ior:SI (lshiftrt:SI (reg:SI 112 [ x ])
(const_int 31 [0x1f]))
(reg:SI 110)))
])
Trying 10, 16 -> 17:
10: r110:SI=r113:SI&0xfffffffffffffffe
REG_DEAD r113:SI
16: x0:SI=r112:SI 0>>0x1f|r110:SI
REG_DEAD r110:SI
REG_DEAD r112:SI
17: use x0:SI
Failed to match this instruction:
(parallel [
(use (ior:SI (and:SI (reg:SI 113 [ y ])
(const_int -2 [0xfffffffffffffffe]))
(lshiftrt:SI (reg:SI 112 [ x ])
(const_int 31 [0x1f]))))
(set (reg/i:SI 0 x0)
(ior:SI (and:SI (reg:SI 113 [ y ])
(const_int -2 [0xfffffffffffffffe]))
(lshiftrt:SI (reg:SI 112 [ x ])
(const_int 31 [0x1f]))))
])
Failed to match this instruction:
(parallel [
(use (ior:SI (and:SI (reg:SI 113 [ y ])
(const_int -2 [0xfffffffffffffffe]))
(lshiftrt:SI (reg:SI 112 [ x ])
(const_int 31 [0x1f]))))
(set (reg/i:SI 0 x0)
(ior:SI (and:SI (reg:SI 113 [ y ])
(const_int -2 [0xfffffffffffffffe]))
(lshiftrt:SI (reg:SI 112 [ x ])
(const_int 31 [0x1f]))))
])
starting the processing of deferred insns
rescanning insn with uid = 10.
rescanning insn with uid = 16.
ending the processing of deferred insns
main
Dataflow summary:
;; fully invalidated by EH 0 [x0] 1 [x1] 2 [x2] 3 [x3] 4 [x4] 5 [x5] 6
[x6] 7 [x7] 8 [x8] 9 [x9] 10 [x10] 11 [x11] 12 [x12] 13 [x13] 14 [x14] 15 [x15]
16 [x16] 17 [x17] 30 [x30] 32 [v0] 33 [v1] 34 [v2] 35 [v3] 36 [v4] 37 [v5] 38
[v6] 39 [v7] 48 [v16] 49 [v17] 50 [v18] 51 [v19] 52 [v20] 53 [v21] 54 [v22] 55
[v23] 56 [v24] 57 [v25] 58 [v26] 59 [v27] 60 [v28] 61 [v29] 62 [v30] 63 [v31]
66 [cc] 68 [p0] 69 [p1] 70 [p2] 71 [p3] 72 [p4] 73 [p5] 74 [p6] 75 [p7] 76 [p8]
77 [p9] 78 [p10] 79 [p11] 80 [p12] 81 [p13] 82 [p14] 83 [p15] 84 [fpmr] 85
[ffr] 86 [ffrt]
;; hardware regs used 31 [sp] 64 [sfp] 65 [ap]
;; regular block artificial uses 29 [x29] 31 [sp] 64 [sfp] 65 [ap]
;; eh block artificial uses 29 [x29] 31 [sp] 64 [sfp] 65 [ap]
;; entry block defs 0 [x0] 1 [x1] 2 [x2] 3 [x3] 4 [x4] 5 [x5] 6 [x6] 7
[x7] 8 [x8] 29 [x29] 30 [x30] 31 [sp] 32 [v0] 33 [v1] 34 [v2] 35 [v3] 36 [v4]
37 [v5] 38 [v6] 39 [v7] 64 [sfp] 65 [ap] 68 [p0] 69 [p1] 70 [p2] 71 [p3]
;; exit block uses 0 [x0] 29 [x29] 31 [sp] 64 [sfp]
;; regs ever live 0 [x0] 1 [x1]
;; ref usage r0={2d,3u} r1={1d,1u} r2={1d} r3={1d} r4={1d} r5={1d} r6={1d}
r7={1d} r8={1d} r29={1d,2u} r30={1d} r31={1d,2u} r32={1d} r33={1d} r34={1d}
r35={1d} r36={1d} r37={1d} r38={1d} r39={1d} r64={1d,2u} r65={1d,1u} r68={1d}
r69={1d} r70={1d} r71={1d} r110={1d,1u} r112={1d,1u} r113={1d,1u}
;; total ref usage 44{30d,14u,0e} in 5{5 regular + 0 call} insns.
;; basic block 2, loop depth 0, count 1073741824 (estimated locally, freq
1.0000), maybe hot
;; prev block 0, next block 1, flags: (RTL, MODIFIED)
;; pred: ENTRY [always] count:1073741824 (estimated locally, freq
1.0000) (FALLTHRU)
;; bb 2 artificial_defs: { }
;; bb 2 artificial_uses: { u-1(29){ }u-1(31){ }u-1(64){ }u-1(65){ }}
;; lr in 0 [x0] 1 [x1] 29 [x29] 31 [sp] 64 [sfp] 65 [ap]
;; lr use 0 [x0] 1 [x1] 29 [x29] 31 [sp] 64 [sfp] 65 [ap]
;; lr def 0 [x0] 105 106 107 108 109 110 112 113
;; live in 0 [x0] 1 [x1] 29 [x29] 31 [sp] 64 [sfp] 65 [ap]
;; live gen 0 [x0] 105 106 107 108 109 110 112 113
;; live kill
(note 5 0 19 2 [bb 2] NOTE_INSN_BASIC_BLOCK)
(insn 19 5 2 2 (set (reg:SI 112 [ x ])
(reg:SI 0 x0 [ x ])) "../testcase/testcase.c":39:39 -1
(expr_list:REG_DEAD (reg:SI 0 x0 [ x ])
(nil)))
(note 2 19 20 2 NOTE_INSN_DELETED)
(insn 20 2 3 2 (set (reg:SI 113 [ y ])
(reg:SI 1 x1 [ y ])) "../testcase/testcase.c":39:39 -1
(expr_list:REG_DEAD (reg:SI 1 x1 [ y ])
(nil)))
(note 3 20 4 2 NOTE_INSN_DELETED)
(note 4 3 7 2 NOTE_INSN_FUNCTION_BEG)
(note 7 4 8 2 NOTE_INSN_DELETED)
(note 8 7 10 2 NOTE_INSN_DELETED)
(insn 10 8 11 2 (set (reg:SI 110)
(and:SI (reg:SI 113 [ y ])
(const_int -2 [0xfffffffffffffffe])))
"../testcase/testcase.c":35:20 551 {andsi3}
(expr_list:REG_DEAD (reg:SI 113 [ y ])
(nil)))
(note 11 10 16 2 NOTE_INSN_DELETED)
(insn 16 11 17 2 (set (reg/i:SI 0 x0)
(ior:SI (lshiftrt:SI (reg:SI 112 [ x ])
(const_int 31 [0x1f]))
(reg:SI 110))) "../testcase/testcase.c":41:1 585 {ior_lshrsi3}
(expr_list:REG_DEAD (reg:SI 110)
(expr_list:REG_DEAD (reg:SI 112 [ x ])
(nil))))
(insn 17 16 0 2 (use (reg/i:SI 0 x0)) "../testcase/testcase.c":41:1 -1
(nil))
;; succ: EXIT [always] count:1073741824 (estimated locally, freq
1.0000) (FALLTHRU)
;; lr out 0 [x0] 29 [x29] 31 [sp] 64 [sfp] 65 [ap]
;; live out 0 [x0] 29 [x29] 31 [sp] 64 [sfp] 65 [ap]
;; Function foo (foo, funcdef_no=1, decl_uid=4068, cgraph_uid=2, symbol_order=1)
scanning new insn with uid = 19.
rescanning insn with uid = 2.
scanning new insn with uid = 20.
rescanning insn with uid = 3.
starting the processing of deferred insns
ending the processing of deferred insns
df_analyze called
df_worklist_dataflow_doublequeue: n_basic_blocks 3 n_edges 2 count 3 ( 1)
foo
Dataflow summary:
def_info->table_size = 47, use_info->table_size = 0
;; fully invalidated by EH 0 [0] 2 [2] 3 [3] 4 [4] 5 [5] 6 [6] 7 [7] 8
[8] 9 [9] 10 [10] 11 [11] 12 [12] 13 [13] 32 [0] 33 [1] 34 [2] 35 [3] 36 [4] 37
[5] 38 [6] 39 [7] 40 [8] 41 [9] 42 [10] 43 [11] 44 [12] 45 [13] 64 [0] 65 [1]
66 [2] 67 [3] 68 [4] 69 [5] 70 [6] 71 [7] 72 [8] 73 [9] 74 [10] 75 [11] 76 [12]
77 [13] 78 [14] 79 [15] 80 [16] 81 [17] 82 [18] 83 [19] 96 [lr] 97 [ctr] 98
[ca] 100 [0] 101 [1] 105 [5] 106 [6] 107 [7] 109 [vscr]
;; hardware regs used 1 [1] 99 [ap] 109 [vscr] 110 [sfp]
;; regular block artificial uses 1 [1] 31 [31] 99 [ap] 110 [sfp]
;; eh block artificial uses 1 [1] 31 [31] 99 [ap] 110 [sfp]
;; entry block defs 1 [1] 3 [3] 4 [4] 5 [5] 6 [6] 7 [7] 8 [8] 9 [9] 10
[10] 31 [31] 33 [1] 34 [2] 35 [3] 36 [4] 37 [5] 38 [6] 39 [7] 40 [8] 41 [9] 42
[10] 43 [11] 44 [12] 45 [13] 66 [2] 67 [3] 68 [4] 69 [5] 70 [6] 71 [7] 72 [8]
73 [9] 74 [10] 75 [11] 76 [12] 77 [13] 96 [lr] 99 [ap] 109 [vscr] 110 [sfp]
;; exit block uses 1 [1] 3 [3] 31 [31] 108 [vrsave] 109 [vscr] 110 [sfp]
;; regs ever live 3 [3] 4 [4]
;; ref usage r1={1d,2u} r3={2d,3u} r4={1d,1u} r5={1d} r6={1d} r7={1d}
r8={1d} r9={1d} r10={1d} r31={1d,2u} r33={1d} r34={1d} r35={1d} r36={1d}
r37={1d} r38={1d} r39={1d} r40={1d} r41={1d} r42={1d} r43={1d} r44={1d}
r45={1d} r66={1d} r67={1d} r68={1d} r69={1d} r70={1d} r71={1d} r72={1d}
r73={1d} r74={1d} r75={1d} r76={1d} r77={1d} r96={1d} r99={1d,1u} r108={1u}
r109={1d,1u} r110={1d,2u} r122={1d,1u} r123={1d,2u} r124={1d,1u} r125={1d,1u}
r126={1d,1u} r127={1d,1u} r128={1d,1u} r129={1d,1u} r130={1d,1u}
;; total ref usage 72{49d,23u,0e} in 11{11 regular + 0 call} insns.
( )->[0]->( 2 )
;; bb 0 artificial_defs: { d0(1){ }d2(3){ }d3(4){ }d4(5){ }d5(6){ }d6(7){
}d7(8){ }d8(9){ }d9(10){ }d10(31){ }d11(33){ }d12(34){ }d13(35){ }d14(36){
}d15(37){ }d16(38){ }d17(39){ }d18(40){ }d19(41){ }d20(42){ }d21(43){ }d22(44){
}d23(45){ }d24(66){ }d25(67){ }d26(68){ }d27(69){ }d28(70){ }d29(71){ }d30(72){
}d31(73){ }d32(74){ }d33(75){ }d34(76){ }d35(77){ }d36(96){ }d37(99){
}d38(109){ }d39(110){ }}
;; bb 0 artificial_uses: { }
;; lr in 108 [vrsave]
;; lr use
;; lr def 1 [1] 3 [3] 4 [4] 5 [5] 6 [6] 7 [7] 8 [8] 9 [9] 10 [10] 31
[31] 33 [1] 34 [2] 35 [3] 36 [4] 37 [5] 38 [6] 39 [7] 40 [8] 41 [9] 42 [10] 43
[11] 44 [12] 45 [13] 66 [2] 67 [3] 68 [4] 69 [5] 70 [6] 71 [7] 72 [8] 73 [9] 74
[10] 75 [11] 76 [12] 77 [13] 96 [lr] 99 [ap] 109 [vscr] 110 [sfp]
;; live in
;; live gen 1 [1] 3 [3] 4 [4] 5 [5] 6 [6] 7 [7] 8 [8] 9 [9] 10 [10] 31
[31] 33 [1] 34 [2] 35 [3] 36 [4] 37 [5] 38 [6] 39 [7] 40 [8] 41 [9] 42 [10] 43
[11] 44 [12] 45 [13] 66 [2] 67 [3] 68 [4] 69 [5] 70 [6] 71 [7] 72 [8] 73 [9] 74
[10] 75 [11] 76 [12] 77 [13] 96 [lr] 99 [ap] 109 [vscr] 110 [sfp]
;; live kill
;; lr out 1 [1] 3 [3] 4 [4] 31 [31] 99 [ap] 108 [vrsave] 109 [vscr] 110
[sfp]
;; live out 1 [1] 3 [3] 4 [4] 31 [31] 99 [ap] 109 [vscr] 110 [sfp]
( 0 )->[2]->( 1 )
;; bb 2 artificial_defs: { }
;; bb 2 artificial_uses: { u-1(1){ }u-1(31){ }u-1(99){ }u-1(110){ }}
;; lr in 1 [1] 3 [3] 4 [4] 31 [31] 99 [ap] 108 [vrsave] 109 [vscr] 110
[sfp]
;; lr use 1 [1] 3 [3] 4 [4] 31 [31] 99 [ap] 110 [sfp]
;; lr def 3 [3] 122 123 124 125 126 127 128 129 130
;; live in 1 [1] 3 [3] 4 [4] 31 [31] 99 [ap] 109 [vscr] 110 [sfp]
;; live gen 3 [3] 122 123 124 125 126 127 128
;; live kill
;; lr out 1 [1] 3 [3] 31 [31] 99 [ap] 108 [vrsave] 109 [vscr] 110 [sfp]
;; live out 1 [1] 3 [3] 31 [31] 99 [ap] 109 [vscr] 110 [sfp]
( 2 )->[1]->( )
;; bb 1 artificial_defs: { }
;; bb 1 artificial_uses: { u-1(1){ }u-1(3){ }u-1(31){ }u-1(108){ }u-1(109){
}u-1(110){ }}
;; lr in 1 [1] 3 [3] 31 [31] 108 [vrsave] 109 [vscr] 110 [sfp]
;; lr use 1 [1] 3 [3] 31 [31] 108 [vrsave] 109 [vscr] 110 [sfp]
;; lr def
;; live in 1 [1] 3 [3] 31 [31] 109 [vscr] 110 [sfp]
;; live gen
;; live kill
;; lr out
;; live out
Finding needed instructions:
Adding insn 17 to worklist
Finished finding needed instructions:
processing block 2 lr out = 1 [1] 3 [3] 31 [31] 99 [ap] 108 [vrsave] 109
[vscr] 110 [sfp]
Adding insn 16 to worklist
Adding insn 11 to worklist
Adding insn 10 to worklist
Adding insn 9 to worklist
Adding insn 8 to worklist
Adding insn 7 to worklist
Adding insn 3 to worklist
Adding insn 20 to worklist
Adding insn 2 to worklist
Adding insn 19 to worklist
df_worklist_dataflow_doublequeue: n_basic_blocks 3 n_edges 2 count 3 ( 1)
insn_cost 4 for 19: r129:DI=%3:DI
REG_DEAD %3:DI
insn_cost 4 for 2: r122:DI=r129:DI
REG_DEAD r129:DI
insn_cost 4 for 20: r130:DI=%4:DI
REG_DEAD %4:DI
insn_cost 4 for 3: r123:DI=r130:DI
REG_DEAD r130:DI
insn_cost 4 for 7: r125:SI=r122:DI#0<-<0x1
REG_DEAD r122:DI
insn_cost 4 for 8: r126:SI=r125:SI^r123:DI#0
REG_DEAD r125:SI
insn_cost 4 for 9: r127:SI=r126:SI&0x1
REG_DEAD r126:SI
insn_cost 4 for 10: r124:SI=r127:SI^r123:DI#0
REG_DEAD r127:SI
REG_DEAD r123:DI
insn_cost 4 for 11: r128:DI=zero_extend(r124:SI)
REG_DEAD r124:SI
insn_cost 4 for 16: %3:DI=r128:DI
REG_DEAD r128:DI
insn_cost 0 for 17: use %3:DI
Trying 2 -> 7:
2: r122:DI=r129:DI
REG_DEAD r129:DI
7: r125:SI=r122:DI#0<-<0x1
REG_DEAD r122:DI
Successfully matched this instruction:
(set (reg:SI 125 [ x_4 ])
(rotate:SI (subreg:SI (reg:DI 129 [ x ]) 0)
(const_int 1 [0x1])))
allowing combination of insns 2 and 7
original costs 4 + 4 = 8
replacement cost 4
deferring deletion of insn with uid = 2.
modifying insn i3 7: r125:SI=r129:DI#0<-<0x1
REG_DEAD r129:DI
deferring rescan insn with uid = 7.
Trying 3 -> 8:
3: r123:DI=r130:DI
REG_DEAD r130:DI
8: r126:SI=r125:SI^r123:DI#0
REG_DEAD r125:SI
Failed to match this instruction:
(parallel [
(set (reg:SI 126 [ _5 ])
(xor:SI (reg:SI 125 [ x_4 ])
(subreg:SI (reg:DI 130 [ y ]) 0)))
(set (reg/v:DI 123 [ y ])
(reg:DI 130 [ y ]))
])
Failed to match this instruction:
(parallel [
(set (reg:SI 126 [ _5 ])
(xor:SI (reg:SI 125 [ x_4 ])
(subreg:SI (reg:DI 130 [ y ]) 0)))
(set (reg/v:DI 123 [ y ])
(reg:DI 130 [ y ]))
])
Trying 7 -> 8:
7: r125:SI=r129:DI#0<-<0x1
REG_DEAD r129:DI
8: r126:SI=r125:SI^r123:DI#0
REG_DEAD r125:SI
Failed to match this instruction:
(set (reg:SI 126 [ _5 ])
(xor:SI (rotate:SI (subreg:SI (reg:DI 129 [ x ]) 0)
(const_int 1 [0x1]))
(subreg:SI (reg/v:DI 123 [ y ]) 0)))
Trying 7, 3 -> 8:
7: r125:SI=r129:DI#0<-<0x1
REG_DEAD r129:DI
3: r123:DI=r130:DI
REG_DEAD r130:DI
8: r126:SI=r125:SI^r123:DI#0
REG_DEAD r125:SI
Failed to match this instruction:
(parallel [
(set (reg:SI 126 [ _5 ])
(xor:SI (rotate:SI (subreg:SI (reg:DI 129 [ x ]) 0)
(const_int 1 [0x1]))
(subreg:SI (reg:DI 130 [ y ]) 0)))
(set (reg/v:DI 123 [ y ])
(reg:DI 130 [ y ]))
])
Failed to match this instruction:
(parallel [
(set (reg:SI 126 [ _5 ])
(xor:SI (rotate:SI (subreg:SI (reg:DI 129 [ x ]) 0)
(const_int 1 [0x1]))
(subreg:SI (reg:DI 130 [ y ]) 0)))
(set (reg/v:DI 123 [ y ])
(reg:DI 130 [ y ]))
])
Successfully matched this instruction:
(set (reg/v:DI 123 [ y ])
(reg:DI 130 [ y ]))
Failed to match this instruction:
(set (reg:SI 126 [ _5 ])
(xor:SI (rotate:SI (subreg:SI (reg:DI 129 [ x ]) 0)
(const_int 1 [0x1]))
(subreg:SI (reg:DI 130 [ y ]) 0)))
Trying 8 -> 9:
8: r126:SI=r125:SI^r123:DI#0
REG_DEAD r125:SI
9: r127:SI=r126:SI&0x1
REG_DEAD r126:SI
Failed to match this instruction:
(set (reg:SI 127 [ _6 ])
(and:SI (xor:SI (reg:SI 125 [ x_4 ])
(subreg:SI (reg/v:DI 123 [ y ]) 0))
(const_int 1 [0x1])))
Trying 3, 8 -> 9:
3: r123:DI=r130:DI
REG_DEAD r130:DI
8: r126:SI=r125:SI^r123:DI#0
REG_DEAD r125:SI
9: r127:SI=r126:SI&0x1
REG_DEAD r126:SI
Failed to match this instruction:
(parallel [
(set (reg:SI 127 [ _6 ])
(and:SI (xor:SI (reg:SI 125 [ x_4 ])
(subreg:SI (reg:DI 130 [ y ]) 0))
(const_int 1 [0x1])))
(set (reg/v:DI 123 [ y ])
(reg:DI 130 [ y ]))
])
Failed to match this instruction:
(parallel [
(set (reg:SI 127 [ _6 ])
(and:SI (xor:SI (reg:SI 125 [ x_4 ])
(subreg:SI (reg:DI 130 [ y ]) 0))
(const_int 1 [0x1])))
(set (reg/v:DI 123 [ y ])
(reg:DI 130 [ y ]))
])
Successfully matched this instruction:
(set (reg/v:DI 123 [ y ])
(reg:DI 130 [ y ]))
Failed to match this instruction:
(set (reg:SI 127 [ _6 ])
(and:SI (xor:SI (reg:SI 125 [ x_4 ])
(subreg:SI (reg:DI 130 [ y ]) 0))
(const_int 1 [0x1])))
Trying 7, 8 -> 9:
7: r125:SI=r129:DI#0<-<0x1
REG_DEAD r129:DI
8: r126:SI=r125:SI^r123:DI#0
REG_DEAD r125:SI
9: r127:SI=r126:SI&0x1
REG_DEAD r126:SI
Failed to match this instruction:
(set (reg:SI 127 [ _6 ])
(and:SI (xor:SI (rotate:SI (subreg:SI (reg:DI 129 [ x ]) 0)
(const_int 1 [0x1]))
(subreg:SI (reg/v:DI 123 [ y ]) 0))
(const_int 1 [0x1])))
Successfully matched this instruction:
(set (reg:SI 126 [ _5 ])
(rotate:SI (subreg:SI (reg:DI 129 [ x ]) 0)
(const_int 1 [0x1])))
Failed to match this instruction:
(set (reg:SI 127 [ _6 ])
(and:SI (xor:SI (reg:SI 126 [ _5 ])
(subreg:SI (reg/v:DI 123 [ y ]) 0))
(const_int 1 [0x1])))
Trying 7, 3, 8 -> 9:
7: r125:SI=r129:DI#0<-<0x1
REG_DEAD r129:DI
3: r123:DI=r130:DI
REG_DEAD r130:DI
8: r126:SI=r125:SI^r123:DI#0
REG_DEAD r125:SI
9: r127:SI=r126:SI&0x1
REG_DEAD r126:SI
Failed to match this instruction:
(parallel [
(set (reg:SI 127 [ _6 ])
(and:SI (xor:SI (rotate:SI (subreg:SI (reg:DI 129 [ x ]) 0)
(const_int 1 [0x1]))
(subreg:SI (reg:DI 130 [ y ]) 0))
(const_int 1 [0x1])))
(set (reg/v:DI 123 [ y ])
(reg:DI 130 [ y ]))
])
Failed to match this instruction:
(parallel [
(set (reg:SI 127 [ _6 ])
(and:SI (xor:SI (rotate:SI (subreg:SI (reg:DI 129 [ x ]) 0)
(const_int 1 [0x1]))
(subreg:SI (reg:DI 130 [ y ]) 0))
(const_int 1 [0x1])))
(set (reg/v:DI 123 [ y ])
(reg:DI 130 [ y ]))
])
Successfully matched this instruction:
(set (reg/v:DI 123 [ y ])
(reg:DI 130 [ y ]))
Failed to match this instruction:
(set (reg:SI 127 [ _6 ])
(and:SI (xor:SI (rotate:SI (subreg:SI (reg:DI 129 [ x ]) 0)
(const_int 1 [0x1]))
(subreg:SI (reg:DI 130 [ y ]) 0))
(const_int 1 [0x1])))
Trying 9 -> 10:
9: r127:SI=r126:SI&0x1
REG_DEAD r126:SI
10: r124:SI=r127:SI^r123:DI#0
REG_DEAD r127:SI
REG_DEAD r123:DI
Failed to match this instruction:
(set (reg:SI 124 [ _7 ])
(xor:SI (and:SI (reg:SI 126 [ _5 ])
(const_int 1 [0x1]))
(subreg:SI (reg/v:DI 123 [ y ]) 0)))
Trying 8, 9 -> 10:
8: r126:SI=r125:SI^r123:DI#0
REG_DEAD r125:SI
9: r127:SI=r126:SI&0x1
REG_DEAD r126:SI
10: r124:SI=r127:SI^r123:DI#0
REG_DEAD r127:SI
REG_DEAD r123:DI
Successfully matched this instruction:
(set (reg:SI 124 [ _7 ])
(ior:SI (and:SI (reg:SI 125 [ x_4 ])
(const_int 1 [0x1]))
(and:SI (subreg:SI (reg/v:DI 123 [ y ]) 0)
(const_int -2 [0xfffffffffffffffe]))))
allowing combination of insns 8, 9 and 10
original costs 4 + 4 + 4 = 12
replacement cost 4
deferring deletion of insn with uid = 9.
deferring deletion of insn with uid = 8.
modifying insn i3 10: r124:SI=r125:SI&0x1|r123:DI#0&0xfffffffffffffffe
REG_DEAD r125:SI
REG_DEAD r123:DI
deferring rescan insn with uid = 10.
Trying 7 -> 10:
7: r125:SI=r129:DI#0<-<0x1
REG_DEAD r129:DI
10: r124:SI=r125:SI&0x1|r123:DI#0&0xfffffffffffffffe
REG_DEAD r125:SI
REG_DEAD r123:DI
Failed to match this instruction:
(set (reg:SI 124 [ _7 ])
(ior:SI (and:SI (subreg:SI (reg/v:DI 123 [ y ]) 0)
(const_int -2 [0xfffffffffffffffe]))
(zero_extract:SI (subreg:SI (reg:DI 129 [ x ]) 0)
(const_int 1 [0x1])
(const_int 0 [0]))))
Successfully matched this instruction:
(set (reg:SI 124 [ _7 ])
(ior:SI (and:SI (subreg:SI (reg/v:DI 123 [ y ]) 0)
(const_int -2 [0xfffffffffffffffe]))
(lshiftrt:SI (subreg:SI (reg:DI 129 [ x ]) 0)
(const_int 31 [0x1f]))))
allowing combination of insns 7 and 10
original costs 4 + 4 = 8
replacement cost 4
deferring deletion of insn with uid = 7.
modifying insn i3 10: r124:SI=r123:DI#0&0xfffffffffffffffe|r129:DI#0 0>>0x1f
REG_DEAD r129:DI
REG_DEAD r123:DI
deferring rescan insn with uid = 10.
Trying 3 -> 10:
3: r123:DI=r130:DI
REG_DEAD r130:DI
10: r124:SI=r123:DI#0&0xfffffffffffffffe|r129:DI#0 0>>0x1f
REG_DEAD r129:DI
REG_DEAD r123:DI
Failed to match this instruction:
(set (reg:SI 124 [ _7 ])
(ior:SI (and:SI (subreg:SI (reg:DI 130 [ y ]) 0)
(const_int -2 [0xfffffffffffffffe]))
(subreg:SI (zero_extract:DI (reg:DI 129 [ x ])
(const_int 32 [0x20])
(const_int 1 [0x1])) 0)))
Failed to match this instruction:
(set (reg:SI 124 [ _7 ])
(ior:SI (and:SI (subreg:SI (reg:DI 130 [ y ]) 0)
(const_int -2 [0xfffffffffffffffe]))
(subreg:SI (and:DI (lshiftrt:DI (reg:DI 129 [ x ])
(const_int 31 [0x1f]))
(const_int 4294967295 [0xffffffff])) 0)))
Trying 10 -> 11:
10: r124:SI=r123:DI#0&0xfffffffffffffffe|r129:DI#0 0>>0x1f
REG_DEAD r129:DI
REG_DEAD r123:DI
11: r128:DI=zero_extend(r124:SI)
REG_DEAD r124:SI
Failed to match this instruction:
(set (reg:DI 128 [ _7 ])
(ior:DI (and:DI (reg/v:DI 123 [ y ])
(const_int 4294967294 [0xfffffffe]))
(lshiftrt:DI (reg:DI 129 [ x ])
(const_int 31 [0x1f]))))
Trying 3, 10 -> 11:
3: r123:DI=r130:DI
REG_DEAD r130:DI
10: r124:SI=r123:DI#0&0xfffffffffffffffe|r129:DI#0 0>>0x1f
REG_DEAD r129:DI
REG_DEAD r123:DI
11: r128:DI=zero_extend(r124:SI)
REG_DEAD r124:SI
Failed to match this instruction:
(set (reg:DI 128 [ _7 ])
(ior:DI (and:DI (reg:DI 130 [ y ])
(const_int 4294967294 [0xfffffffe]))
(lshiftrt:DI (reg:DI 129 [ x ])
(const_int 31 [0x1f]))))
Successfully matched this instruction:
(set (reg:DI 124 [ _7 ])
(lshiftrt:DI (reg:DI 129 [ x ])
(const_int 31 [0x1f])))
Failed to match this instruction:
(set (reg:DI 128 [ _7 ])
(ior:DI (and:DI (reg:DI 130 [ y ])
(const_int 4294967294 [0xfffffffe]))
(reg:DI 124 [ _7 ])))
Trying 11 -> 16:
11: r128:DI=zero_extend(r124:SI)
REG_DEAD r124:SI
16: %3:DI=r128:DI
REG_DEAD r128:DI
Successfully matched this instruction:
(set (reg/i:DI 3 3)
(zero_extend:DI (reg:SI 124 [ _7 ])))
allowing combination of insns 11 and 16
original costs 4 + 4 = 8
replacement cost 4
deferring deletion of insn with uid = 11.
modifying insn i3 16: %3:DI=zero_extend(r124:SI)
REG_DEAD r124:SI
deferring rescan insn with uid = 16.
Trying 10 -> 16:
10: r124:SI=r123:DI#0&0xfffffffffffffffe|r129:DI#0 0>>0x1f
REG_DEAD r129:DI
REG_DEAD r123:DI
16: %3:DI=zero_extend(r124:SI)
REG_DEAD r124:SI
Failed to match this instruction:
(set (reg/i:DI 3 3)
(ior:DI (and:DI (reg/v:DI 123 [ y ])
(const_int 4294967294 [0xfffffffe]))
(lshiftrt:DI (reg:DI 129 [ x ])
(const_int 31 [0x1f]))))
Trying 3, 10 -> 16:
3: r123:DI=r130:DI
REG_DEAD r130:DI
10: r124:SI=r123:DI#0&0xfffffffffffffffe|r129:DI#0 0>>0x1f
REG_DEAD r129:DI
REG_DEAD r123:DI
16: %3:DI=zero_extend(r124:SI)
REG_DEAD r124:SI
Failed to match this instruction:
(set (reg/i:DI 3 3)
(ior:DI (and:DI (reg:DI 130 [ y ])
(const_int 4294967294 [0xfffffffe]))
(lshiftrt:DI (reg:DI 129 [ x ])
(const_int 31 [0x1f]))))
Successfully matched this instruction:
(set (reg:DI 124 [ _7 ])
(lshiftrt:DI (reg:DI 129 [ x ])
(const_int 31 [0x1f])))
Failed to match this instruction:
(set (reg/i:DI 3 3)
(ior:DI (and:DI (reg:DI 130 [ y ])
(const_int 4294967294 [0xfffffffe]))
(reg:DI 124 [ _7 ])))
Trying 16 -> 17:
16: %3:DI=zero_extend(r124:SI)
REG_DEAD r124:SI
17: use %3:DI
Failed to match this instruction:
(parallel [
(use (and:DI (subreg:DI (reg:SI 124 [ _7 ]) 0)
(const_int 4294967295 [0xffffffff])))
(set (reg/i:DI 3 3)
(zero_extend:DI (reg:SI 124 [ _7 ])))
])
Failed to match this instruction:
(parallel [
(use (and:DI (subreg:DI (reg:SI 124 [ _7 ]) 0)
(const_int 4294967295 [0xffffffff])))
(set (reg/i:DI 3 3)
(zero_extend:DI (reg:SI 124 [ _7 ])))
])
Trying 10, 16 -> 17:
10: r124:SI=r123:DI#0&0xfffffffffffffffe|r129:DI#0 0>>0x1f
REG_DEAD r129:DI
REG_DEAD r123:DI
16: %3:DI=zero_extend(r124:SI)
REG_DEAD r124:SI
17: use %3:DI
Failed to match this instruction:
(parallel [
(use (ior:DI (and:DI (reg/v:DI 123 [ y ])
(const_int -2 [0xfffffffffffffffe]))
(lshiftrt:DI (reg:DI 129 [ x ])
(const_int 31 [0x1f]))))
(set (reg/i:DI 3 3)
(ior:DI (and:DI (reg/v:DI 123 [ y ])
(const_int 4294967294 [0xfffffffe]))
(lshiftrt:DI (reg:DI 129 [ x ])
(const_int 31 [0x1f]))))
])
Failed to match this instruction:
(parallel [
(use (ior:DI (and:DI (reg/v:DI 123 [ y ])
(const_int -2 [0xfffffffffffffffe]))
(lshiftrt:DI (reg:DI 129 [ x ])
(const_int 31 [0x1f]))))
(set (reg/i:DI 3 3)
(ior:DI (and:DI (reg/v:DI 123 [ y ])
(const_int 4294967294 [0xfffffffe]))
(lshiftrt:DI (reg:DI 129 [ x ])
(const_int 31 [0x1f]))))
])
starting the processing of deferred insns
rescanning insn with uid = 10.
rescanning insn with uid = 16.
ending the processing of deferred insns
foo
Dataflow summary:
;; fully invalidated by EH 0 [0] 2 [2] 3 [3] 4 [4] 5 [5] 6 [6] 7 [7] 8
[8] 9 [9] 10 [10] 11 [11] 12 [12] 13 [13] 32 [0] 33 [1] 34 [2] 35 [3] 36 [4] 37
[5] 38 [6] 39 [7] 40 [8] 41 [9] 42 [10] 43 [11] 44 [12] 45 [13] 64 [0] 65 [1]
66 [2] 67 [3] 68 [4] 69 [5] 70 [6] 71 [7] 72 [8] 73 [9] 74 [10] 75 [11] 76 [12]
77 [13] 78 [14] 79 [15] 80 [16] 81 [17] 82 [18] 83 [19] 96 [lr] 97 [ctr] 98
[ca] 100 [0] 101 [1] 105 [5] 106 [6] 107 [7] 109 [vscr]
;; hardware regs used 1 [1] 99 [ap] 109 [vscr] 110 [sfp]
;; regular block artificial uses 1 [1] 31 [31] 99 [ap] 110 [sfp]
;; eh block artificial uses 1 [1] 31 [31] 99 [ap] 110 [sfp]
;; entry block defs 1 [1] 3 [3] 4 [4] 5 [5] 6 [6] 7 [7] 8 [8] 9 [9] 10
[10] 31 [31] 33 [1] 34 [2] 35 [3] 36 [4] 37 [5] 38 [6] 39 [7] 40 [8] 41 [9] 42
[10] 43 [11] 44 [12] 45 [13] 66 [2] 67 [3] 68 [4] 69 [5] 70 [6] 71 [7] 72 [8]
73 [9] 74 [10] 75 [11] 76 [12] 77 [13] 96 [lr] 99 [ap] 109 [vscr] 110 [sfp]
;; exit block uses 1 [1] 3 [3] 31 [31] 108 [vrsave] 109 [vscr] 110 [sfp]
;; regs ever live 3 [3] 4 [4]
;; ref usage r1={1d,2u} r3={2d,3u} r4={1d,1u} r5={1d} r6={1d} r7={1d}
r8={1d} r9={1d} r10={1d} r31={1d,2u} r33={1d} r34={1d} r35={1d} r36={1d}
r37={1d} r38={1d} r39={1d} r40={1d} r41={1d} r42={1d} r43={1d} r44={1d}
r45={1d} r66={1d} r67={1d} r68={1d} r69={1d} r70={1d} r71={1d} r72={1d}
r73={1d} r74={1d} r75={1d} r76={1d} r77={1d} r96={1d} r99={1d,1u} r108={1u}
r109={1d,1u} r110={1d,2u} r123={1d,1u} r124={1d,1u} r129={1d,1u} r130={1d,1u}
;; total ref usage 61{44d,17u,0e} in 6{6 regular + 0 call} insns.
;; basic block 2, loop depth 0, count 1073741824 (estimated locally, freq
1.0000), maybe hot
;; prev block 0, next block 1, flags: (RTL, MODIFIED)
;; pred: ENTRY [always] count:1073741824 (estimated locally, freq
1.0000) (FALLTHRU)
;; bb 2 artificial_defs: { }
;; bb 2 artificial_uses: { u-1(1){ }u-1(31){ }u-1(99){ }u-1(110){ }}
;; lr in 1 [1] 3 [3] 4 [4] 31 [31] 99 [ap] 108 [vrsave] 109 [vscr] 110
[sfp]
;; lr use 1 [1] 3 [3] 4 [4] 31 [31] 99 [ap] 110 [sfp]
;; lr def 3 [3] 122 123 124 125 126 127 128 129 130
;; live in 1 [1] 3 [3] 4 [4] 31 [31] 99 [ap] 109 [vscr] 110 [sfp]
;; live gen 3 [3] 122 123 124 125 126 127 128 129 130
;; live kill
(note 5 0 19 2 [bb 2] NOTE_INSN_BASIC_BLOCK)
(insn 19 5 2 2 (set (reg:DI 129 [ x ])
(reg:DI 3 3 [ x ])) "../testcase/testcase.c":26:1 709
{*movdi_internal64}
(expr_list:REG_DEAD (reg:DI 3 3 [ x ])
(nil)))
(note 2 19 20 2 NOTE_INSN_DELETED)
(insn 20 2 3 2 (set (reg:DI 130 [ y ])
(reg:DI 4 4 [ y ])) "../testcase/testcase.c":26:1 709
{*movdi_internal64}
(expr_list:REG_DEAD (reg:DI 4 4 [ y ])
(nil)))
(insn 3 20 4 2 (set (reg/v:DI 123 [ y ])
(reg:DI 130 [ y ])) "../testcase/testcase.c":26:1 709
{*movdi_internal64}
(expr_list:REG_DEAD (reg:DI 130 [ y ])
(nil)))
(note 4 3 7 2 NOTE_INSN_FUNCTION_BEG)
(note 7 4 8 2 NOTE_INSN_DELETED)
(note 8 7 9 2 NOTE_INSN_DELETED)
(note 9 8 10 2 NOTE_INSN_DELETED)
(insn 10 9 11 2 (set (reg:SI 124 [ _7 ])
(ior:SI (and:SI (subreg:SI (reg/v:DI 123 [ y ]) 0)
(const_int -2 [0xfffffffffffffffe]))
(lshiftrt:SI (subreg:SI (reg:DI 129 [ x ]) 0)
(const_int 31 [0x1f])))) "../testcase/testcase.c":22:21 255
{*rotlsi3_insert_4}
(expr_list:REG_DEAD (reg:DI 129 [ x ])
(expr_list:REG_DEAD (reg/v:DI 123 [ y ])
(nil))))
(note 11 10 16 2 NOTE_INSN_DELETED)
(insn 16 11 17 2 (set (reg/i:DI 3 3)
(zero_extend:DI (reg:SI 124 [ _7 ]))) "../testcase/testcase.c":28:1 16
{zero_extendsidi2}
(expr_list:REG_DEAD (reg:SI 124 [ _7 ])
(nil)))
(insn 17 16 0 2 (use (reg/i:DI 3 3)) "../testcase/testcase.c":28:1 -1
(nil))
;; succ: EXIT [always] count:1073741824 (estimated locally, freq
1.0000) (FALLTHRU)
;; lr out 1 [1] 3 [3] 31 [31] 99 [ap] 108 [vrsave] 109 [vscr] 110 [sfp]
;; live out 1 [1] 3 [3] 31 [31] 99 [ap] 109 [vscr] 110 [sfp]
;; Function foo (foo, funcdef_no=1, decl_uid=4067, cgraph_uid=2, symbol_order=1)
scanning new insn with uid = 20.
rescanning insn with uid = 2.
scanning new insn with uid = 21.
rescanning insn with uid = 3.
starting the processing of deferred insns
ending the processing of deferred insns
df_analyze called
df_worklist_dataflow_doublequeue: n_basic_blocks 3 n_edges 2 count 3 ( 1)
foo
Dataflow summary:
def_info->table_size = 47, use_info->table_size = 0
;; fully invalidated by EH 0 [0] 2 [2] 3 [3] 4 [4] 5 [5] 6 [6] 7 [7] 8
[8] 9 [9] 10 [10] 11 [11] 12 [12] 13 [13] 32 [0] 33 [1] 34 [2] 35 [3] 36 [4] 37
[5] 38 [6] 39 [7] 40 [8] 41 [9] 42 [10] 43 [11] 44 [12] 45 [13] 64 [0] 65 [1]
66 [2] 67 [3] 68 [4] 69 [5] 70 [6] 71 [7] 72 [8] 73 [9] 74 [10] 75 [11] 76 [12]
77 [13] 78 [14] 79 [15] 80 [16] 81 [17] 82 [18] 83 [19] 96 [lr] 97 [ctr] 98
[ca] 100 [0] 101 [1] 105 [5] 106 [6] 107 [7] 109 [vscr]
;; hardware regs used 1 [1] 99 [ap] 109 [vscr] 110 [sfp]
;; regular block artificial uses 1 [1] 31 [31] 99 [ap] 110 [sfp]
;; eh block artificial uses 1 [1] 31 [31] 99 [ap] 110 [sfp]
;; entry block defs 1 [1] 3 [3] 4 [4] 5 [5] 6 [6] 7 [7] 8 [8] 9 [9] 10
[10] 31 [31] 33 [1] 34 [2] 35 [3] 36 [4] 37 [5] 38 [6] 39 [7] 40 [8] 41 [9] 42
[10] 43 [11] 44 [12] 45 [13] 66 [2] 67 [3] 68 [4] 69 [5] 70 [6] 71 [7] 72 [8]
73 [9] 74 [10] 75 [11] 76 [12] 77 [13] 96 [lr] 99 [ap] 109 [vscr] 110 [sfp]
;; exit block uses 1 [1] 3 [3] 31 [31] 108 [vrsave] 109 [vscr] 110 [sfp]
;; regs ever live 3 [3] 4 [4]
;; ref usage r1={1d,2u} r3={2d,3u} r4={1d,1u} r5={1d} r6={1d} r7={1d}
r8={1d} r9={1d} r10={1d} r31={1d,2u} r33={1d} r34={1d} r35={1d} r36={1d}
r37={1d} r38={1d} r39={1d} r40={1d} r41={1d} r42={1d} r43={1d} r44={1d}
r45={1d} r66={1d} r67={1d} r68={1d} r69={1d} r70={1d} r71={1d} r72={1d}
r73={1d} r74={1d} r75={1d} r76={1d} r77={1d} r96={1d} r99={1d,1u} r108={1u}
r109={1d,1u} r110={1d,2u} r122={1d,1u} r123={1d,1u} r124={1d,1u} r125={1d,1u}
r126={1d,1u} r127={1d,1u} r129={1d,1u} r130={1d,1u} r131={1d,1u}
;; total ref usage 71{49d,22u,0e} in 11{11 regular + 0 call} insns.
( )->[0]->( 2 )
;; bb 0 artificial_defs: { d0(1){ }d2(3){ }d3(4){ }d4(5){ }d5(6){ }d6(7){
}d7(8){ }d8(9){ }d9(10){ }d10(31){ }d11(33){ }d12(34){ }d13(35){ }d14(36){
}d15(37){ }d16(38){ }d17(39){ }d18(40){ }d19(41){ }d20(42){ }d21(43){ }d22(44){
}d23(45){ }d24(66){ }d25(67){ }d26(68){ }d27(69){ }d28(70){ }d29(71){ }d30(72){
}d31(73){ }d32(74){ }d33(75){ }d34(76){ }d35(77){ }d36(96){ }d37(99){
}d38(109){ }d39(110){ }}
;; bb 0 artificial_uses: { }
;; lr in 108 [vrsave]
;; lr use
;; lr def 1 [1] 3 [3] 4 [4] 5 [5] 6 [6] 7 [7] 8 [8] 9 [9] 10 [10] 31
[31] 33 [1] 34 [2] 35 [3] 36 [4] 37 [5] 38 [6] 39 [7] 40 [8] 41 [9] 42 [10] 43
[11] 44 [12] 45 [13] 66 [2] 67 [3] 68 [4] 69 [5] 70 [6] 71 [7] 72 [8] 73 [9] 74
[10] 75 [11] 76 [12] 77 [13] 96 [lr] 99 [ap] 109 [vscr] 110 [sfp]
;; live in
;; live gen 1 [1] 3 [3] 4 [4] 5 [5] 6 [6] 7 [7] 8 [8] 9 [9] 10 [10] 31
[31] 33 [1] 34 [2] 35 [3] 36 [4] 37 [5] 38 [6] 39 [7] 40 [8] 41 [9] 42 [10] 43
[11] 44 [12] 45 [13] 66 [2] 67 [3] 68 [4] 69 [5] 70 [6] 71 [7] 72 [8] 73 [9] 74
[10] 75 [11] 76 [12] 77 [13] 96 [lr] 99 [ap] 109 [vscr] 110 [sfp]
;; live kill
;; lr out 1 [1] 3 [3] 4 [4] 31 [31] 99 [ap] 108 [vrsave] 109 [vscr] 110
[sfp]
;; live out 1 [1] 3 [3] 4 [4] 31 [31] 99 [ap] 109 [vscr] 110 [sfp]
( 0 )->[2]->( 1 )
;; bb 2 artificial_defs: { }
;; bb 2 artificial_uses: { u-1(1){ }u-1(31){ }u-1(99){ }u-1(110){ }}
;; lr in 1 [1] 3 [3] 4 [4] 31 [31] 99 [ap] 108 [vrsave] 109 [vscr] 110
[sfp]
;; lr use 1 [1] 3 [3] 4 [4] 31 [31] 99 [ap] 110 [sfp]
;; lr def 3 [3] 122 123 124 125 126 127 129 130 131
;; live in 1 [1] 3 [3] 4 [4] 31 [31] 99 [ap] 109 [vscr] 110 [sfp]
;; live gen 3 [3] 122 123 124 125 126 127 129
;; live kill
;; lr out 1 [1] 3 [3] 31 [31] 99 [ap] 108 [vrsave] 109 [vscr] 110 [sfp]
;; live out 1 [1] 3 [3] 31 [31] 99 [ap] 109 [vscr] 110 [sfp]
( 2 )->[1]->( )
;; bb 1 artificial_defs: { }
;; bb 1 artificial_uses: { u-1(1){ }u-1(3){ }u-1(31){ }u-1(108){ }u-1(109){
}u-1(110){ }}
;; lr in 1 [1] 3 [3] 31 [31] 108 [vrsave] 109 [vscr] 110 [sfp]
;; lr use 1 [1] 3 [3] 31 [31] 108 [vrsave] 109 [vscr] 110 [sfp]
;; lr def
;; live in 1 [1] 3 [3] 31 [31] 109 [vscr] 110 [sfp]
;; live gen
;; live kill
;; lr out
;; live out
Finding needed instructions:
Adding insn 18 to worklist
Finished finding needed instructions:
processing block 2 lr out = 1 [1] 3 [3] 31 [31] 99 [ap] 108 [vrsave] 109
[vscr] 110 [sfp]
Adding insn 17 to worklist
Adding insn 12 to worklist
Adding insn 11 to worklist
Adding insn 10 to worklist
Adding insn 8 to worklist
Adding insn 7 to worklist
Adding insn 3 to worklist
Adding insn 21 to worklist
Adding insn 2 to worklist
Adding insn 20 to worklist
df_worklist_dataflow_doublequeue: n_basic_blocks 3 n_edges 2 count 3 ( 1)
insn_cost 4 for 20: r130:DI=%3:DI
REG_DEAD %3:DI
insn_cost 4 for 2: r122:DI=r130:DI
REG_DEAD r130:DI
insn_cost 4 for 21: r131:DI=%4:DI
REG_DEAD %4:DI
insn_cost 4 for 3: r123:DI=r131:DI
REG_DEAD r131:DI
insn_cost 4 for 7: r125:SI=r122:DI#0<-<0x1
REG_DEAD r122:DI
insn_cost 4 for 8: r126:SI=r125:SI&0x1
REG_DEAD r125:SI
insn_cost 4 for 10: r127:SI=r123:DI#0&0xfffffffffffffffe
REG_DEAD r123:DI
insn_cost 4 for 11: r124:SI=r126:SI|r127:SI
REG_DEAD r127:SI
REG_DEAD r126:SI
insn_cost 4 for 12: r129:DI=zero_extend(r124:SI)
REG_DEAD r124:SI
insn_cost 4 for 17: %3:DI=r129:DI
REG_DEAD r129:DI
insn_cost 0 for 18: use %3:DI
Trying 2 -> 7:
2: r122:DI=r130:DI
REG_DEAD r130:DI
7: r125:SI=r122:DI#0<-<0x1
REG_DEAD r122:DI
Successfully matched this instruction:
(set (reg:SI 125 [ x_4 ])
(rotate:SI (subreg:SI (reg:DI 130 [ x ]) 0)
(const_int 1 [0x1])))
allowing combination of insns 2 and 7
original costs 4 + 4 = 8
replacement cost 4
deferring deletion of insn with uid = 2.
modifying insn i3 7: r125:SI=r130:DI#0<-<0x1
REG_DEAD r130:DI
deferring rescan insn with uid = 7.
Trying 7 -> 8:
7: r125:SI=r130:DI#0<-<0x1
REG_DEAD r130:DI
8: r126:SI=r125:SI&0x1
REG_DEAD r125:SI
Failed to match this instruction:
(set (reg:SI 126 [ _8 ])
(zero_extract:SI (subreg:SI (reg:DI 130 [ x ]) 0)
(const_int 1 [0x1])
(const_int 0 [0])))
Successfully matched this instruction:
(set (reg:SI 126 [ _8 ])
(lshiftrt:SI (subreg:SI (reg:DI 130 [ x ]) 0)
(const_int 31 [0x1f])))
allowing combination of insns 7 and 8
original costs 4 + 4 = 8
replacement cost 4
deferring deletion of insn with uid = 7.
modifying insn i3 8: r126:SI=r130:DI#0 0>>0x1f
REG_DEAD r130:DI
deferring rescan insn with uid = 8.
Trying 3 -> 10:
3: r123:DI=r131:DI
REG_DEAD r131:DI
10: r127:SI=r123:DI#0&0xfffffffffffffffe
REG_DEAD r123:DI
Successfully matched this instruction:
(set (reg:SI 127)
(and:SI (subreg:SI (reg:DI 131 [ y ]) 0)
(const_int -2 [0xfffffffffffffffe])))
allowing combination of insns 3 and 10
original costs 4 + 4 = 8
replacement cost 4
deferring deletion of insn with uid = 3.
modifying insn i3 10: r127:SI=r131:DI#0&0xfffffffffffffffe
REG_DEAD r131:DI
deferring rescan insn with uid = 10.
Trying 8 -> 11:
8: r126:SI=r130:DI#0 0>>0x1f
REG_DEAD r130:DI
11: r124:SI=r126:SI|r127:SI
REG_DEAD r127:SI
REG_DEAD r126:SI
Failed to match this instruction:
(set (reg:SI 124 [ _7 ])
(ior:SI (subreg:SI (zero_extract:DI (reg:DI 130 [ x ])
(const_int 32 [0x20])
(const_int 1 [0x1])) 0)
(reg:SI 127)))
Failed to match this instruction:
(set (reg:SI 124 [ _7 ])
(ior:SI (subreg:SI (and:DI (lshiftrt:DI (reg:DI 130 [ x ])
(const_int 31 [0x1f]))
(const_int 4294967295 [0xffffffff])) 0)
(reg:SI 127)))
Trying 10 -> 11:
10: r127:SI=r131:DI#0&0xfffffffffffffffe
REG_DEAD r131:DI
11: r124:SI=r126:SI|r127:SI
REG_DEAD r127:SI
REG_DEAD r126:SI
Failed to match this instruction:
(set (reg:SI 124 [ _7 ])
(ior:SI (and:SI (subreg:SI (reg:DI 131 [ y ]) 0)
(const_int -2 [0xfffffffffffffffe]))
(reg:SI 126 [ _8 ])))
Trying 10, 8 -> 11:
10: r127:SI=r131:DI#0&0xfffffffffffffffe
REG_DEAD r131:DI
8: r126:SI=r130:DI#0 0>>0x1f
REG_DEAD r130:DI
11: r124:SI=r126:SI|r127:SI
REG_DEAD r127:SI
REG_DEAD r126:SI
Failed to match this instruction:
(set (reg:SI 124 [ _7 ])
(ior:SI (and:SI (subreg:SI (reg:DI 131 [ y ]) 0)
(const_int -2 [0xfffffffffffffffe]))
(subreg:SI (zero_extract:DI (reg:DI 130 [ x ])
(const_int 32 [0x20])
(const_int 1 [0x1])) 0)))
Failed to match this instruction:
(set (reg:SI 124 [ _7 ])
(ior:SI (and:SI (subreg:SI (reg:DI 131 [ y ]) 0)
(const_int -2 [0xfffffffffffffffe]))
(subreg:SI (and:DI (lshiftrt:DI (reg:DI 130 [ x ])
(const_int 31 [0x1f]))
(const_int 4294967295 [0xffffffff])) 0)))
Failed to match this instruction:
(set (reg:DI 127)
(zero_extract:DI (reg:DI 130 [ x ])
(const_int 32 [0x20])
(const_int 1 [0x1])))
Successfully matched this instruction:
(set (reg:DI 127)
(and:DI (lshiftrt:DI (reg:DI 130 [ x ])
(const_int 31 [0x1f]))
(const_int 4294967295 [0xffffffff])))
Failed to match this instruction:
(set (reg:SI 124 [ _7 ])
(ior:SI (and:SI (subreg:SI (reg:DI 131 [ y ]) 0)
(const_int -2 [0xfffffffffffffffe]))
(subreg:SI (reg:DI 127) 0)))
Trying 11 -> 12:
11: r124:SI=r126:SI|r127:SI
REG_DEAD r127:SI
REG_DEAD r126:SI
12: r129:DI=zero_extend(r124:SI)
REG_DEAD r124:SI
Failed to match this instruction:
(set (reg:DI 129 [ _7 ])
(zero_extend:DI (ior:SI (reg:SI 126 [ _8 ])
(reg:SI 127))))
Trying 8, 11 -> 12:
8: r126:SI=r130:DI#0 0>>0x1f
REG_DEAD r130:DI
11: r124:SI=r126:SI|r127:SI
REG_DEAD r127:SI
REG_DEAD r126:SI
12: r129:DI=zero_extend(r124:SI)
REG_DEAD r124:SI
Failed to match this instruction:
(set (reg:DI 129 [ _7 ])
(zero_extend:DI (ior:SI (subreg:SI (zero_extract:DI (reg:DI 130 [ x ])
(const_int 32 [0x20])
(const_int 1 [0x1])) 0)
(reg:SI 127))))
Failed to match this instruction:
(set (reg:DI 129 [ _7 ])
(zero_extend:DI (ior:SI (subreg:SI (and:DI (lshiftrt:DI (reg:DI 130 [ x ])
(const_int 31 [0x1f]))
(const_int 4294967295 [0xffffffff])) 0)
(reg:SI 127))))
Failed to match this instruction:
(set (reg:DI 124 [ _7 ])
(zero_extract:DI (reg:DI 130 [ x ])
(const_int 32 [0x20])
(const_int 1 [0x1])))
Successfully matched this instruction:
(set (reg:DI 124 [ _7 ])
(and:DI (lshiftrt:DI (reg:DI 130 [ x ])
(const_int 31 [0x1f]))
(const_int 4294967295 [0xffffffff])))
Failed to match this instruction:
(set (reg:DI 129 [ _7 ])
(zero_extend:DI (ior:SI (subreg:SI (reg:DI 124 [ _7 ]) 0)
(reg:SI 127))))
Trying 10, 11 -> 12:
10: r127:SI=r131:DI#0&0xfffffffffffffffe
REG_DEAD r131:DI
11: r124:SI=r126:SI|r127:SI
REG_DEAD r127:SI
REG_DEAD r126:SI
12: r129:DI=zero_extend(r124:SI)
REG_DEAD r124:SI
Failed to match this instruction:
(set (reg:DI 129 [ _7 ])
(zero_extend:DI (ior:SI (and:SI (subreg:SI (reg:DI 131 [ y ]) 0)
(const_int -2 [0xfffffffffffffffe]))
(reg:SI 126 [ _8 ]))))
Successfully matched this instruction:
(set (reg:SI 124 [ _7 ])
(and:SI (subreg:SI (reg:DI 131 [ y ]) 0)
(const_int -2 [0xfffffffffffffffe])))
Failed to match this instruction:
(set (reg:DI 129 [ _7 ])
(zero_extend:DI (ior:SI (reg:SI 124 [ _7 ])
(reg:SI 126 [ _8 ]))))
Trying 10, 8, 11 -> 12:
10: r127:SI=r131:DI#0&0xfffffffffffffffe
REG_DEAD r131:DI
8: r126:SI=r130:DI#0 0>>0x1f
REG_DEAD r130:DI
11: r124:SI=r126:SI|r127:SI
REG_DEAD r127:SI
REG_DEAD r126:SI
12: r129:DI=zero_extend(r124:SI)
REG_DEAD r124:SI
Failed to match this instruction:
(set (reg:DI 129 [ _7 ])
(zero_extend:DI (ior:SI (and:SI (subreg:SI (reg:DI 131 [ y ]) 0)
(const_int -2 [0xfffffffffffffffe]))
(lshiftrt:SI (subreg:SI (reg:DI 130 [ x ]) 0)
(const_int 31 [0x1f])))))
Successfully matched this instruction:
(set (reg:SI 124 [ _7 ])
(lshiftrt:SI (subreg:SI (reg:DI 130 [ x ]) 0)
(const_int 31 [0x1f])))
Failed to match this instruction:
(set (reg:DI 129 [ _7 ])
(zero_extend:DI (ior:SI (and:SI (subreg:SI (reg:DI 131 [ y ]) 0)
(const_int -2 [0xfffffffffffffffe]))
(reg:SI 124 [ _7 ]))))
Trying 12 -> 17:
12: r129:DI=zero_extend(r124:SI)
REG_DEAD r124:SI
17: %3:DI=r129:DI
REG_DEAD r129:DI
Successfully matched this instruction:
(set (reg/i:DI 3 3)
(zero_extend:DI (reg:SI 124 [ _7 ])))
allowing combination of insns 12 and 17
original costs 4 + 4 = 8
replacement cost 4
deferring deletion of insn with uid = 12.
modifying insn i3 17: %3:DI=zero_extend(r124:SI)
REG_DEAD r124:SI
deferring rescan insn with uid = 17.
Trying 11 -> 17:
11: r124:SI=r126:SI|r127:SI
REG_DEAD r127:SI
REG_DEAD r126:SI
17: %3:DI=zero_extend(r124:SI)
REG_DEAD r124:SI
Failed to match this instruction:
(set (reg/i:DI 3 3)
(zero_extend:DI (ior:SI (reg:SI 126 [ _8 ])
(reg:SI 127))))
Trying 8, 11 -> 17:
8: r126:SI=r130:DI#0 0>>0x1f
REG_DEAD r130:DI
11: r124:SI=r126:SI|r127:SI
REG_DEAD r127:SI
REG_DEAD r126:SI
17: %3:DI=zero_extend(r124:SI)
REG_DEAD r124:SI
Failed to match this instruction:
(set (reg/i:DI 3 3)
(zero_extend:DI (ior:SI (subreg:SI (zero_extract:DI (reg:DI 130 [ x ])
(const_int 32 [0x20])
(const_int 1 [0x1])) 0)
(reg:SI 127))))
Failed to match this instruction:
(set (reg/i:DI 3 3)
(zero_extend:DI (ior:SI (subreg:SI (and:DI (lshiftrt:DI (reg:DI 130 [ x ])
(const_int 31 [0x1f]))
(const_int 4294967295 [0xffffffff])) 0)
(reg:SI 127))))
Failed to match this instruction:
(set (reg:DI 124 [ _7 ])
(zero_extract:DI (reg:DI 130 [ x ])
(const_int 32 [0x20])
(const_int 1 [0x1])))
Successfully matched this instruction:
(set (reg:DI 124 [ _7 ])
(and:DI (lshiftrt:DI (reg:DI 130 [ x ])
(const_int 31 [0x1f]))
(const_int 4294967295 [0xffffffff])))
Failed to match this instruction:
(set (reg/i:DI 3 3)
(zero_extend:DI (ior:SI (subreg:SI (reg:DI 124 [ _7 ]) 0)
(reg:SI 127))))
Trying 10, 11 -> 17:
10: r127:SI=r131:DI#0&0xfffffffffffffffe
REG_DEAD r131:DI
11: r124:SI=r126:SI|r127:SI
REG_DEAD r127:SI
REG_DEAD r126:SI
17: %3:DI=zero_extend(r124:SI)
REG_DEAD r124:SI
Failed to match this instruction:
(set (reg/i:DI 3 3)
(zero_extend:DI (ior:SI (and:SI (subreg:SI (reg:DI 131 [ y ]) 0)
(const_int -2 [0xfffffffffffffffe]))
(reg:SI 126 [ _8 ]))))
Successfully matched this instruction:
(set (reg:SI 124 [ _7 ])
(and:SI (subreg:SI (reg:DI 131 [ y ]) 0)
(const_int -2 [0xfffffffffffffffe])))
Failed to match this instruction:
(set (reg/i:DI 3 3)
(zero_extend:DI (ior:SI (reg:SI 124 [ _7 ])
(reg:SI 126 [ _8 ]))))
Trying 10, 8, 11 -> 17:
10: r127:SI=r131:DI#0&0xfffffffffffffffe
REG_DEAD r131:DI
8: r126:SI=r130:DI#0 0>>0x1f
REG_DEAD r130:DI
11: r124:SI=r126:SI|r127:SI
REG_DEAD r127:SI
REG_DEAD r126:SI
17: %3:DI=zero_extend(r124:SI)
REG_DEAD r124:SI
Failed to match this instruction:
(set (reg/i:DI 3 3)
(zero_extend:DI (ior:SI (and:SI (subreg:SI (reg:DI 131 [ y ]) 0)
(const_int -2 [0xfffffffffffffffe]))
(lshiftrt:SI (subreg:SI (reg:DI 130 [ x ]) 0)
(const_int 31 [0x1f])))))
Successfully matched this instruction:
(set (reg:SI 124 [ _7 ])
(lshiftrt:SI (subreg:SI (reg:DI 130 [ x ]) 0)
(const_int 31 [0x1f])))
Failed to match this instruction:
(set (reg/i:DI 3 3)
(zero_extend:DI (ior:SI (and:SI (subreg:SI (reg:DI 131 [ y ]) 0)
(const_int -2 [0xfffffffffffffffe]))
(reg:SI 124 [ _7 ]))))
Trying 17 -> 18:
17: %3:DI=zero_extend(r124:SI)
REG_DEAD r124:SI
18: use %3:DI
Failed to match this instruction:
(parallel [
(use (and:DI (subreg:DI (reg:SI 124 [ _7 ]) 0)
(const_int 4294967295 [0xffffffff])))
(set (reg/i:DI 3 3)
(zero_extend:DI (reg:SI 124 [ _7 ])))
])
Failed to match this instruction:
(parallel [
(use (and:DI (subreg:DI (reg:SI 124 [ _7 ]) 0)
(const_int 4294967295 [0xffffffff])))
(set (reg/i:DI 3 3)
(zero_extend:DI (reg:SI 124 [ _7 ])))
])
Trying 11, 17 -> 18:
11: r124:SI=r126:SI|r127:SI
REG_DEAD r127:SI
REG_DEAD r126:SI
17: %3:DI=zero_extend(r124:SI)
REG_DEAD r124:SI
18: use %3:DI
Failed to match this instruction:
(parallel [
(use (and:DI (subreg:DI (ior:SI (reg:SI 126 [ _8 ])
(reg:SI 127)) 0)
(const_int 4294967295 [0xffffffff])))
(set (reg/i:DI 3 3)
(zero_extend:DI (ior:SI (reg:SI 126 [ _8 ])
(reg:SI 127))))
])
Failed to match this instruction:
(parallel [
(use (and:DI (subreg:DI (ior:SI (reg:SI 126 [ _8 ])
(reg:SI 127)) 0)
(const_int 4294967295 [0xffffffff])))
(set (reg/i:DI 3 3)
(zero_extend:DI (ior:SI (reg:SI 126 [ _8 ])
(reg:SI 127))))
])
starting the processing of deferred insns
rescanning insn with uid = 8.
rescanning insn with uid = 10.
rescanning insn with uid = 17.
ending the processing of deferred insns
foo
Dataflow summary:
;; fully invalidated by EH 0 [0] 2 [2] 3 [3] 4 [4] 5 [5] 6 [6] 7 [7] 8
[8] 9 [9] 10 [10] 11 [11] 12 [12] 13 [13] 32 [0] 33 [1] 34 [2] 35 [3] 36 [4] 37
[5] 38 [6] 39 [7] 40 [8] 41 [9] 42 [10] 43 [11] 44 [12] 45 [13] 64 [0] 65 [1]
66 [2] 67 [3] 68 [4] 69 [5] 70 [6] 71 [7] 72 [8] 73 [9] 74 [10] 75 [11] 76 [12]
77 [13] 78 [14] 79 [15] 80 [16] 81 [17] 82 [18] 83 [19] 96 [lr] 97 [ctr] 98
[ca] 100 [0] 101 [1] 105 [5] 106 [6] 107 [7] 109 [vscr]
;; hardware regs used 1 [1] 99 [ap] 109 [vscr] 110 [sfp]
;; regular block artificial uses 1 [1] 31 [31] 99 [ap] 110 [sfp]
;; eh block artificial uses 1 [1] 31 [31] 99 [ap] 110 [sfp]
;; entry block defs 1 [1] 3 [3] 4 [4] 5 [5] 6 [6] 7 [7] 8 [8] 9 [9] 10
[10] 31 [31] 33 [1] 34 [2] 35 [3] 36 [4] 37 [5] 38 [6] 39 [7] 40 [8] 41 [9] 42
[10] 43 [11] 44 [12] 45 [13] 66 [2] 67 [3] 68 [4] 69 [5] 70 [6] 71 [7] 72 [8]
73 [9] 74 [10] 75 [11] 76 [12] 77 [13] 96 [lr] 99 [ap] 109 [vscr] 110 [sfp]
;; exit block uses 1 [1] 3 [3] 31 [31] 108 [vrsave] 109 [vscr] 110 [sfp]
;; regs ever live 3 [3] 4 [4]
;; ref usage r1={1d,2u} r3={2d,3u} r4={1d,1u} r5={1d} r6={1d} r7={1d}
r8={1d} r9={1d} r10={1d} r31={1d,2u} r33={1d} r34={1d} r35={1d} r36={1d}
r37={1d} r38={1d} r39={1d} r40={1d} r41={1d} r42={1d} r43={1d} r44={1d}
r45={1d} r66={1d} r67={1d} r68={1d} r69={1d} r70={1d} r71={1d} r72={1d}
r73={1d} r74={1d} r75={1d} r76={1d} r77={1d} r96={1d} r99={1d,1u} r108={1u}
r109={1d,1u} r110={1d,2u} r124={1d,1u} r126={1d,1u} r127={1d,1u} r130={1d,1u}
r131={1d,1u}
;; total ref usage 63{45d,18u,0e} in 7{7 regular + 0 call} insns.
;; basic block 2, loop depth 0, count 1073741824 (estimated locally, freq
1.0000), maybe hot
;; prev block 0, next block 1, flags: (RTL, MODIFIED)
;; pred: ENTRY [always] count:1073741824 (estimated locally, freq
1.0000) (FALLTHRU)
;; bb 2 artificial_defs: { }
;; bb 2 artificial_uses: { u-1(1){ }u-1(31){ }u-1(99){ }u-1(110){ }}
;; lr in 1 [1] 3 [3] 4 [4] 31 [31] 99 [ap] 108 [vrsave] 109 [vscr] 110
[sfp]
;; lr use 1 [1] 3 [3] 4 [4] 31 [31] 99 [ap] 110 [sfp]
;; lr def 3 [3] 122 123 124 125 126 127 129 130 131
;; live in 1 [1] 3 [3] 4 [4] 31 [31] 99 [ap] 109 [vscr] 110 [sfp]
;; live gen 3 [3] 122 123 124 125 126 127 129 130 131
;; live kill
(note 5 0 20 2 [bb 2] NOTE_INSN_BASIC_BLOCK)
(insn 20 5 2 2 (set (reg:DI 130 [ x ])
(reg:DI 3 3 [ x ])) "../testcase/testcase.c":24:1 709
{*movdi_internal64}
(expr_list:REG_DEAD (reg:DI 3 3 [ x ])
(nil)))
(note 2 20 21 2 NOTE_INSN_DELETED)
(insn 21 2 3 2 (set (reg:DI 131 [ y ])
(reg:DI 4 4 [ y ])) "../testcase/testcase.c":24:1 709
{*movdi_internal64}
(expr_list:REG_DEAD (reg:DI 4 4 [ y ])
(nil)))
(note 3 21 4 2 NOTE_INSN_DELETED)
(note 4 3 7 2 NOTE_INSN_FUNCTION_BEG)
(note 7 4 8 2 NOTE_INSN_DELETED)
(insn 8 7 10 2 (set (reg:SI 126 [ _8 ])
(lshiftrt:SI (subreg:SI (reg:DI 130 [ x ]) 0)
(const_int 31 [0x1f]))) "../testcase/testcase.c":20:21 281 {lshrsi3}
(expr_list:REG_DEAD (reg:DI 130 [ x ])
(nil)))
(insn 10 8 11 2 (set (reg:SI 127)
(and:SI (subreg:SI (reg:DI 131 [ y ]) 0)
(const_int -2 [0xfffffffffffffffe])))
"../testcase/testcase.c":20:21 200 {andsi3_mask}
(expr_list:REG_DEAD (reg:DI 131 [ y ])
(nil)))
(insn 11 10 12 2 (set (reg:SI 124 [ _7 ])
(ior:SI (reg:SI 126 [ _8 ])
(reg:SI 127))) "../testcase/testcase.c":20:21 215 {*boolsi3}
(expr_list:REG_DEAD (reg:SI 127)
(expr_list:REG_DEAD (reg:SI 126 [ _8 ])
(nil))))
(note 12 11 17 2 NOTE_INSN_DELETED)
(insn 17 12 18 2 (set (reg/i:DI 3 3)
(zero_extend:DI (reg:SI 124 [ _7 ]))) "../testcase/testcase.c":26:1 16
{zero_extendsidi2}
(expr_list:REG_DEAD (reg:SI 124 [ _7 ])
(nil)))
(insn 18 17 0 2 (use (reg/i:DI 3 3)) "../testcase/testcase.c":26:1 -1
(nil))
;; succ: EXIT [always] count:1073741824 (estimated locally, freq
1.0000) (FALLTHRU)
;; lr out 1 [1] 3 [3] 31 [31] 99 [ap] 108 [vrsave] 109 [vscr] 110 [sfp]
;; live out 1 [1] 3 [3] 31 [31] 99 [ap] 109 [vscr] 110 [sfp]