49 lines · plain
1; RUN: llc -mtriple=thumbv4t-none--eabi < %s | FileCheck %s --check-prefix=CHECK --check-prefix=CHECK-V4T2; RUN: llc -mtriple=thumbv6m-none--eabi < %s | FileCheck %s --check-prefix=CHECK --check-prefix=CHECK-V6M3 4; CHECK-LABEL: test15define i32 @test1(ptr %p) {6 7; Offsets less than 8 can be generated in a single add8; CHECK: adds [[NEWBASE:r[0-9]]], r0, #49 %1 = getelementptr inbounds i32, ptr %p, i32 110 %2 = getelementptr inbounds i32, ptr %p, i32 211 %3 = getelementptr inbounds i32, ptr %p, i32 312 %4 = getelementptr inbounds i32, ptr %p, i32 413 14; CHECK-NEXT: ldm [[NEWBASE]],15 %5 = load i32, ptr %1, align 416 %6 = load i32, ptr %2, align 417 %7 = load i32, ptr %3, align 418 %8 = load i32, ptr %4, align 419 20 %9 = add nsw i32 %5, %621 %10 = add nsw i32 %9, %722 %11 = add nsw i32 %10, %823 ret i32 %1124}25 26; CHECK-LABEL: test227define i32 @test2(ptr %p) {28 29; Offsets >=8 require a mov and an add30; CHECK-V4T: movs [[NEWBASE:r[0-9]]], r031; CHECK-V6M: mov [[NEWBASE:r[0-9]]], r032; CHECK-NEXT: adds [[NEWBASE]], #833 %1 = getelementptr inbounds i32, ptr %p, i32 234 %2 = getelementptr inbounds i32, ptr %p, i32 335 %3 = getelementptr inbounds i32, ptr %p, i32 436 %4 = getelementptr inbounds i32, ptr %p, i32 537 38; CHECK-NEXT: ldm [[NEWBASE]],39 %5 = load i32, ptr %1, align 440 %6 = load i32, ptr %2, align 441 %7 = load i32, ptr %3, align 442 %8 = load i32, ptr %4, align 443 44 %9 = add nsw i32 %5, %645 %10 = add nsw i32 %9, %746 %11 = add nsw i32 %10, %847 ret i32 %1148}49