[llvm-bugs] [Bug 41884] New: [ARM] MachineScheduler can increase code size

via llvm-bugs llvm-bugs at lists.llvm.org
Wed May 15 05:22:14 PDT 2019


https://bugs.llvm.org/show_bug.cgi?id=41884

            Bug ID: 41884
           Summary: [ARM] MachineScheduler can increase code size
           Product: libraries
           Version: trunk
          Hardware: PC
                OS: Linux
            Status: NEW
          Severity: enhancement
          Priority: P
         Component: Backend: ARM
          Assignee: unassignedbugs at nondot.org
          Reporter: david.green at arm.com
                CC: llvm-bugs at lists.llvm.org, peter.smith at linaro.org,
                    Ties.Stuij at arm.com

When compiling Thumb2 code, the machine scheduler can end up increasing code
size.

If the scheduler uses more (virtual) registers, we will end up with more usage
of high registers, and be able to convert less instruction to T1.

Here is an example, showing the code it was producing:
; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
; RUN: llc %s -o - | FileCheck %s

target datalayout = "e-m:e-p:32:32-Fi8-i64:64-v128:64:128-a:0:32-n32-S64"
target triple = "thumbv7em-arm-none-eabi"

%struct.a = type { i32, %struct.b*, i8, i8, i8, i8, i8*, %struct.b*, i16, i16,
i16, i16, i16, i16, i16, i16, i32, i32, i32, i32, i32, i32, i32 }
%struct.b = type { i8, i8, i8, i8, i32, i16, i16, i32, i32, i32, i32, [16 x
i8], [64 x i8], [128 x i8], i32, [68 x i8] }

define void @test(%struct.a* nocapture %dhcp, i16 zeroext %value) #0 {
; CHECK-LABEL: test:
; CHECK:       @ %bb.0: @ %entry
; CHECK-NEXT:    .save {r7, lr}
; CHECK-NEXT:    push {r7, lr}
; CHECK-NEXT:    ldrh r3, [r0, #20]
; CHECK-NEXT:    ldr.w lr, [r0, #16]
; CHECK-NEXT:    lsr.w r12, r1, #8
; CHECK-NEXT:    adds r2, r3, #1
; CHECK-NEXT:    strh r2, [r0, #20]
; CHECK-NEXT:    add.w r2, lr, r3
; CHECK-NEXT:    strb.w r12, [r2, #240]
; CHECK-NEXT:    ldrh r2, [r0, #20]
; CHECK-NEXT:    ldr.w r12, [r0, #16]
; CHECK-NEXT:    adds r3, r2, #1
; CHECK-NEXT:    strh r3, [r0, #20]
; CHECK-NEXT:    add.w r0, r12, r2
; CHECK-NEXT:    strb.w r1, [r0, #240]
; CHECK-NEXT:    pop {r7, pc}
entry:
  %shr = lshr i16 %value, 8
  %conv1 = trunc i16 %shr to i8
  %msg_out = getelementptr inbounds %struct.a, %struct.a* %dhcp, i32 0, i32 7
  %0 = load %struct.b*, %struct.b** %msg_out, align 4
  %options_out_len = getelementptr inbounds %struct.a, %struct.a* %dhcp, i32 0,
i32 8
  %1 = load i16, i16* %options_out_len, align 4
  %inc = add i16 %1, 1
  store i16 %inc, i16* %options_out_len, align 4
  %idxprom = zext i16 %1 to i32
  %arrayidx = getelementptr inbounds %struct.b, %struct.b* %0, i32 0, i32 15,
i32 %idxprom
  store i8 %conv1, i8* %arrayidx, align 1
  %conv4 = trunc i16 %value to i8
  %2 = load %struct.b*, %struct.b** %msg_out, align 4
  %3 = load i16, i16* %options_out_len, align 4
  %inc8 = add i16 %3, 1
  store i16 %inc8, i16* %options_out_len, align 4
  %idxprom9 = zext i16 %3 to i32
  %arrayidx10 = getelementptr inbounds %struct.b, %struct.b* %2, i32 0, i32 15,
i32 %idxprom9
  store i8 %conv4, i8* %arrayidx10, align 1
  ret void
}

attributes #0 = { minsize optsize "target-cpu"="cortex-m4" }


For the moment, in D61882, we are disabling the machine scheduler in these
cases.

-- 
You are receiving this mail because:
You are on the CC list for the bug.
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-bugs/attachments/20190515/8c0d1c20/attachment.html>


More information about the llvm-bugs mailing list