brintos

brintos / llvm-project-archived public Read only

0
0
Text · 2.5 KiB · 696cc84 Raw
78 lines · plain
1; RUN: llc -mtriple=thumbv6m-eabi -verify-machineinstrs %s -o - | FileCheck %s --check-prefixes=CHECK,CHECK-T12; RUN: llc -mtriple=thumbv5e-linux-gnueabi -verify-machineinstrs %s -o - | FileCheck %s --check-prefixes=CHECK,CHECK-T13; RUN: llc -mtriple=thumbv7m -verify-machineinstrs %s -o - | FileCheck %s --check-prefixes=CHECK,CHECK-T24; RUN: llc -mtriple=thumbv7a -verify-machineinstrs %s -o - | FileCheck %s --check-prefixes=CHECK,CHECK-T25 6%struct1 = type { ptr, ptr, i32 }7%struct2 = type { i32, i32, ptr }8 9@x1 = external global %struct1, align 410@x2 = external global %struct1, align 411 12declare void @fn1(i32, i32)13declare void @fn2(ptr)14 15; CHECK-LABEL: test1:16; CHECK-T1: str r0, [r1]17; CHECK-T1-NEXT: str r1, [r1, #4]18; CHECK-T2: strd r0, r1, [r1]19; CHECK-NOT: stm20define void @test1(i32 %unused, ptr %x) {21  %second = getelementptr inbounds %struct1, ptr %x, i32 0, i32 122  store ptr @x1, ptr %x23  store ptr %x, ptr %second24  ret void25}26 27; CHECK-LABEL: test2:28; CHECK-T1: str r0, [r2]29; CHECK-T1-NEXT: str r1, [r2, #4]30; CHECK-T1-NEXT: str r2, [r2, #8]31; CHECK-T2: stm.w r2, {r0, r1, r2}32; CHECK-NOT: stm r2!, {r0, r1, r2}33define i32 @test2(i32 %a, i32 %b, ptr %p) {34entry:35  %p2 = getelementptr inbounds %struct2, ptr %p, i32 0, i32 136  %p3 = getelementptr inbounds %struct2, ptr %p, i32 0, i32 237  store i32 %a, ptr %p, align 438  store i32 %b, ptr %p2, align 439  store ptr %p, ptr %p3, align 440  call void @fn1(i32 %a, i32 %b)41  ret i32 042}43 44; CHECK-LABEL: test3:45; CHECK-T1: str r0, [r2]46; CHECK-T1-NEXT: str r1, [r2, #4]47; CHECK-T1-NEXT: str r2, [r2, #8]48; CHECK-T2: stm.w r2, {r0, r1, r2}49; CHECK-NOT: stm r2!, {r0, r1, r2}50define i32 @test3(i32 %a, i32 %b, ptr %p) {51entry:52  %p2 = getelementptr inbounds %struct2, ptr %p, i32 0, i32 153  %p3 = getelementptr inbounds %struct2, ptr %p, i32 0, i32 254  store i32 %a, ptr %p, align 455  store i32 %b, ptr %p2, align 456  store ptr %p, ptr %p3, align 457  %p4 = getelementptr inbounds %struct2, ptr %p, i32 158  call void @fn2(ptr %p4)59  ret i32 060}61 62; FIXME: We should be using stm in both thumb1 and thumb263; CHECK-LABEL: test4:64; CHECK-T1: str r0, [r0]65; CHECK-T1-NEXT: str r1, [r0, #4]66; CHECK-T1-NEXT: str r2, [r0, #8]67; CHECK-T2: stm r0!, {r0, r1, r2}68define i32 @test4(ptr %p, ptr %q, i32 %a) {69entry:70  %p2 = getelementptr inbounds %struct1, ptr %p, i32 0, i32 171  %p3 = getelementptr inbounds %struct1, ptr %p, i32 0, i32 272  store ptr %p, ptr %p, align 473  store ptr %q, ptr %p2, align 474  store i32 %a, ptr %p3, align 475  call void @fn1(i32 %a, i32 %a)76  ret i32 077}78