zan jyu Wong via llvm-dev
2015-Aug-28 03:51 UTC
[llvm-dev] What does isReMaterializable mean exactly?
Hi, I compiled a function with many instructions that moves immediates. The generated code alloca space in the stack but never use it. Then I try to remove `isReMaterializable = 1' of move immediate instructions in *.td file. And generated code doesn't alloca space in stack. Why this happend? I've try this in many backends, they seem to have the same problem. What exactly does `isReMaterializable = 1' mean? Does the register allocator fail to remove useless frame objects when remating? Any ideas? Thanks. Cheers, Huang ---- example function below ----> .globl osc_trim_fun > .align 1 > .type osc_trim_fun,%function > .code 16 @ @osc_trim_fun > .thumb_func > osc_trim_fun: > .fnstart > @ BB#0: > push.w {r4, r5, r6, r7, r8, r9, r10, r11, lr} > add r7, sp, #12 > sub sp, #44 > movw r10, :lower16:timer_cnt > movw r1, :lower16:this_prd > movw r2, :lower16:sof_cnt > movw r3, :lower16:osc_freq > movw r5, :lower16:g_pll_trimok > movw lr, :lower16:sof_discard > movw r0, #448 > movw r6, #512 > movw r8, #552 > movw r12, #244 > movw r9, #164 > movs r4, #160 > mov.w r11, #0 > movt r10, :upper16:timer_cnt > movt r1, :upper16:this_prd > movt r2, :upper16:sof_cnt > movt r3, :upper16:osc_freq > movt r5, :upper16:g_pll_trimok > movt lr, :upper16:sof_discard > movt r0, #7 > movt r6, #7 > movt r8, #7 > movt r12, #7 > movt r9, #7 > movt r4, #7 > b .LBB2_2 > .LBB2_1: @ in Loop: Header=BB2_2 Depth=1 > mov.w r0, #16384 > movw r10, :lower16:timer_cnt > movw r1, :lower16:this_prd > movw r2, :lower16:sof_cnt > movw r3, :lower16:osc_freq > movw lr, :lower16:sof_discard > movw r12, #244 > movw r6, #512 > movw r9, #164 > mov.w r11, #0 > str r0, [r4] > movw r0, #448 > movt r10, :upper16:timer_cnt > movt r1, :upper16:this_prd > movt r2, :upper16:sof_cnt > movt r3, :upper16:osc_freq > movt lr, :upper16:sof_discard > movt r12, #7 > movt r6, #7 > movt r9, #7 > movt r0, #7 > .LBB2_2: @ =>This Loop Header: Depth=1 > @ Child Loop BB2_3 Depth 2 > @ Child Loop BB2_4 Depth 3 > @ Child Loop BB2_8 Depth 2 > @ Child Loop BB2_9 Depth 3 > str.w r11, [r1] > movs r1, #2 > str.w r11, [r10] > str.w r11, [r2] > str.w r11, [r3] > str.w r11, [r5] > strb.w r1, [lr] > movs r1, #19 > str r1, [r0] > ldr r0, [r6] > bic r0, r0, #3 > str r0, [r6] > ldr r0, [r6] > orr r0, r0, #12 > str r0, [r6] > ldr r0, [r6] > bic r0, r0, #48 > str r0, [r6] > ldr r0, [r6] > bic r0, r0, #192 > str r0, [r6] > ldr r0, [r6] > orr r0, r0, #64 > str r0, [r6] > ldr.w r0, [r8] > bic r0, r0, #16128 > str.w r0, [r8] > ldr.w r0, [r8] > orr r0, r0, #7168 > str.w r0, [r8] > movs r0, #28 > movt r0, #7 > mov r1, r0 > ldr r0, [r1] > orr r0, r0, #1792 > str r0, [r1] > movs r0, #200 > str.w r11, [r12] > bl delay > movw r1, :lower16:handle_tmr3_isr > movs r0, #5 > movs r2, #0 > movt r1, :upper16:handle_tmr3_isr > bl HWI_Install > movs r0, #180 > movt r0, #7 > str.w r11, [r0] > movs r0, #184 > movt r0, #7 > str.w r11, [r0] > movs r0, #176 > movt r0, #7 > mov r10, r0 > movw r0, #16386 > str.w r0, [r10] > bl enable_int > movs r0, #168 > movw r1, #1331 > movt r0, #7 > str r1, [r0] > movw r0, #16385 > str.w r11, [r9] > movw r1, #65534 > mov r9, r10 > str r0, [r4] > .LBB2_3: @ Parent Loop BB2_2 Depth=1 > @ => This Loop Header: Depth=2 > @ Child Loop BB2_4 Depth 3 > mov r0, r1 > ldr r1, [r4] > orr r1, r1, #16384 > str r1, [r4] > .LBB2_4: @ Parent Loop BB2_2 Depth=1 > @ Parent Loop BB2_3 Depth=2 > @ => This Inner Loop Header: > Depth=3 > ldr r1, [r4] > sxth r1, r1 > cmp r1, #0 > blt .LBB2_6 > @ BB#5: @ in Loop: Header=BB2_4 Depth=3 > ldr r1, [r5] > cmp r1, #0 > beq .LBB2_4 > b .LBB2_11 > .LBB2_6: @ %.loopexit1 > @ in Loop: Header=BB2_3 Depth=2 > subs r1, r0, #1 > movw r2, #65535 > tst r0, r2 > bne .LBB2_3 > @ BB#7: @ in Loop: Header=BB2_2 Depth=1 > ldr r0, [r6] > bic r0, r0, #64 > str r0, [r6] > bl disable_int > mov.w r0, #16384 > movw r1, #1791 > str.w r0, [r9] > .LBB2_8: @ Parent Loop BB2_2 Depth=1 > @ => This Loop Header: Depth=2 > @ Child Loop BB2_9 Depth 3 > mov r0, r1 > ldr r1, [r4] > orr r1, r1, #16384 > str r1, [r4] > .LBB2_9: @ Parent Loop BB2_2 Depth=1 > @ Parent Loop BB2_8 Depth=2 > @ => This Inner Loop Header: > Depth=3 > ldr r1, [r4] > sxth r1, r1 > cmp.w r1, #-1 > bgt .LBB2_9 > @ BB#10: @ %.loopexit > @ in Loop: Header=BB2_8 Depth=2 > subs r1, r0, #1 > movw r2, #65535 > tst r0, r2 > bne .LBB2_8 > b .LBB2_1 > .LBB2_11: @ %.critedge > ldr r0, [r6] > bic r0, r0, #64 > str r0, [r6] > bl disable_int > mov.w r0, #16384 > str r0, [r4] > str.w r0, [r9] > add sp, #44 > pop.w {r4, r5, r6, r7, r8, r9, r10, r11, pc} > .Lfunc_end2: > .size osc_trim_fun, .Lfunc_end2-osc_trim_fun > .cantunwind > .fnend >>-------------- next part -------------- An HTML attachment was scrubbed... URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20150828/42f7b57c/attachment.html>