68 lines · plain
1; pr23772 - [ARM] r226200 can emit illegal thumb2 instruction: "sub sp, r12, #80"2; RUN: llc -mcpu=cortex-m3 -O3 -filetype=asm -o - %s | FileCheck %s3; CHECK-NOT: sub{{.*}} sp, r{{.*}}, #4; CHECK: .fnend5; TODO: Missed optimization. The three instructions generated to subtract SP can be converged to a single one6target datalayout = "e-p:32:32:32-i1:8:8-i8:8:8-i16:16:16-i32:32:32-i64:32:32"7target triple = "thumbv7m-unknown-unknown"8%B = type {ptr}9%R = type {i32}10%U = type {ptr, i8, i8}11%E = type {ptr, ptr}12%X = type {i32, i8, i8}13declare external ptr @memalloc(i32, i32, i32)14declare external void @memfree(ptr, i32, i32)15define void @foo(ptr %pb$, ptr %pr$) nounwind {16L.0:17 %pb = alloca ptr18 %pr = alloca ptr19 store ptr %pb$, ptr %pb20 store ptr %pr$, ptr %pr21 %pe = alloca ptr22 %0 = load ptr, ptr %pb23 store ptr %0, ptr %pe24 %1 = load ptr, ptr %pr25 %2 = load i32, ptr %126 switch i32 %2, label %L.1 [27 i32 1, label %L.328 ]29L.3:30 %px = alloca ptr31 %3 = load ptr, ptr %pr32 store ptr %3, ptr %px33 %4 = load ptr, ptr %px34 %5 = load i32, ptr %435 %6 = icmp ne i32 %5, 036 br i1 %6, label %L.5, label %L.437L.5:38 %pu = alloca ptr39 %7 = call ptr @memalloc(i32 8, i32 4, i32 0)40 store ptr %7, ptr %pu41 %8 = load ptr, ptr %px42 %9 = getelementptr %X, ptr %8, i32 0, i32 143 %10 = load i8, ptr %944 %11 = load ptr, ptr %pu45 %12 = getelementptr %U, ptr %11, i32 0, i32 146 store i8 %10, ptr %1247 %13 = load ptr, ptr %pe48 %14 = getelementptr %E, ptr %13, i32 0, i32 149 %15 = load ptr, ptr %1450 %16 = load ptr, ptr %pu51 store ptr %15, ptr %1652 %17 = load ptr, ptr %pu53 %18 = load ptr, ptr %pe54 %19 = getelementptr %E, ptr %18, i32 0, i32 155 store ptr %17, ptr %1956 br label %L.457L.4:58 %20 = load ptr, ptr %px59 call void @memfree(ptr %20, i32 8, i32 0)60 br label %L.261L.1:62 br label %L.263L.2:64 br label %return65return:66 ret void67}68