| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,56 @@ | ||
| # NOTE: Assertions have been autogenerated by utils/update_mir_test_checks.py | ||
| # RUN: llc -mtriple=aarch64-none-eabi -code-model=tiny -run-pass=instruction-select -verify-machineinstrs -O0 %s -o - | FileCheck %s | ||
| --- | | ||
| target datalayout = "e-m:e-i8:8:32-i16:16:32-i64:64-i128:128-n32:64-S128" | ||
|
|
||
| @foo1 = common global [1073741824 x i32] zeroinitializer, align 4 | ||
| @foo2 = common global [1073741824 x i32] zeroinitializer, align 4 | ||
|
|
||
| define i32 @gv_tiny() { | ||
| entry: | ||
| %retval = alloca i32, align 4 | ||
| store i32 0, i32* %retval, align 4 | ||
| %0 = load i32, i32* getelementptr inbounds ([1073741824 x i32], [1073741824 x i32]* @foo1, i64 0, i64 0), align 4 | ||
| %1 = load i32, i32* getelementptr inbounds ([1073741824 x i32], [1073741824 x i32]* @foo2, i64 0, i64 0), align 4 | ||
| %add = add nsw i32 %0, %1 | ||
| ret i32 %add | ||
| } | ||
|
|
||
| ... | ||
| --- | ||
| name: gv_tiny | ||
| legalized: true | ||
| regBankSelected: true | ||
| stack: | ||
| - { id: 0, name: retval, type: default, offset: 0, size: 4, alignment: 4, | ||
| stack-id: 0, callee-saved-register: '', callee-saved-restored: true, | ||
| debug-info-variable: '', debug-info-expression: '', | ||
| debug-info-location: '' } | ||
| constants: | ||
| body: | | ||
| bb.1: | ||
| ; CHECK-LABEL: name: gv_tiny | ||
| ; CHECK: [[ADR:%[0-9]+]]:gpr64 = ADR @foo1 | ||
| ; CHECK: [[COPY:%[0-9]+]]:gpr64sp = COPY [[ADR]] | ||
| ; CHECK: [[ADR1:%[0-9]+]]:gpr64 = ADR @foo2 | ||
| ; CHECK: [[COPY1:%[0-9]+]]:gpr64sp = COPY [[ADR1]] | ||
| ; CHECK: STRWui $wzr, %stack.0.retval, 0 :: (store 4 into %ir.retval) | ||
| ; CHECK: [[LDRWui:%[0-9]+]]:gpr32 = LDRWui [[COPY]], 0 :: (load 4 from `i32* getelementptr inbounds ([1073741824 x i32], [1073741824 x i32]* @foo1, i64 0, i64 0)`) | ||
| ; CHECK: [[LDRWui1:%[0-9]+]]:gpr32 = LDRWui [[COPY1]], 0 :: (load 4 from `i32* getelementptr inbounds ([1073741824 x i32], [1073741824 x i32]* @foo2, i64 0, i64 0)`) | ||
| ; CHECK: [[ADDWrr:%[0-9]+]]:gpr32 = ADDWrr [[LDRWui]], [[LDRWui1]] | ||
| ; CHECK: $w0 = COPY [[ADDWrr]] | ||
| ; CHECK: RET_ReallyLR implicit $w0 | ||
| %1:gpr(s32) = G_CONSTANT i32 0 | ||
| %4:gpr(p0) = G_GLOBAL_VALUE @foo1 | ||
| %3:gpr(p0) = COPY %4(p0) | ||
| %7:gpr(p0) = G_GLOBAL_VALUE @foo2 | ||
| %6:gpr(p0) = COPY %7(p0) | ||
| %0:gpr(p0) = G_FRAME_INDEX %stack.0.retval | ||
| G_STORE %1(s32), %0(p0) :: (store 4 into %ir.retval) | ||
| %2:gpr(s32) = G_LOAD %3(p0) :: (load 4 from `i32* getelementptr inbounds ([1073741824 x i32], [1073741824 x i32]* @foo1, i64 0, i64 0)`) | ||
| %5:gpr(s32) = G_LOAD %6(p0) :: (load 4 from `i32* getelementptr inbounds ([1073741824 x i32], [1073741824 x i32]* @foo2, i64 0, i64 0)`) | ||
| %8:gpr(s32) = G_ADD %2, %5 | ||
| $w0 = COPY %8(s32) | ||
| RET_ReallyLR implicit $w0 | ||
| ... |
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,54 @@ | ||
| ; RUN: llc -mtriple=aarch64-none-eabi -code-model=tiny < %s | FileCheck %s | ||
|
|
||
| @var8 = global i8 0 | ||
| @var16 = global i16 0 | ||
| @var32 = global i32 0 | ||
| @var64 = global i64 0 | ||
|
|
||
| define i8* @global_addr() { | ||
| ; CHECK-LABEL: global_addr: | ||
| ret i8* @var8 | ||
| ; The adr calculation should end up returned directly in x0. | ||
| ; CHECK: adr x0, var8 | ||
| ; CHECK-NEXT: ret | ||
| } | ||
|
|
||
| define i8 @global_i8() { | ||
| ; CHECK-LABEL: global_i8: | ||
| %val = load i8, i8* @var8 | ||
| ret i8 %val | ||
| ; CHECK: adr x[[ADDR_REG:[0-9]+]], var8 | ||
| ; CHECK: ldrb w0, [x[[ADDR_REG]]] | ||
| } | ||
|
|
||
| define i16 @global_i16() { | ||
| ; CHECK-LABEL: global_i16: | ||
| %val = load i16, i16* @var16 | ||
| ret i16 %val | ||
| ; CHECK: adr x[[ADDR_REG:[0-9]+]], var16 | ||
| ; CHECK: ldrh w0, [x[[ADDR_REG]]] | ||
| } | ||
|
|
||
| define i32 @global_i32() { | ||
| ; CHECK-LABEL: global_i32: | ||
| %val = load i32, i32* @var32 | ||
| ret i32 %val | ||
| ; CHECK: adr x[[ADDR_REG:[0-9]+]], var32 | ||
| ; CHECK: ldr w0, [x[[ADDR_REG]]] | ||
| } | ||
|
|
||
| define i64 @global_i64() { | ||
| ; CHECK-LABEL: global_i64: | ||
| %val = load i64, i64* @var64 | ||
| ret i64 %val | ||
| ; CHECK: adr x[[ADDR_REG:[0-9]+]], var64 | ||
| ; CHECK: ldr x0, [x[[ADDR_REG]]] | ||
| } | ||
|
|
||
| define <2 x i64> @constpool() { | ||
| ; CHECK-LABEL: constpool: | ||
| ret <2 x i64> <i64 123456789, i64 987654321100> | ||
|
|
||
| ; CHECK: adr x[[ADDR_REG:[0-9]+]], {{.LCPI[0-9]+_[0-9]+}} | ||
| ; CHECK: ldr q0, [x[[ADDR_REG]]] | ||
| } |
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,13 @@ | ||
| ; RUN: llc -verify-machineinstrs -o - -mtriple=aarch64-none-linux-gnu -code-model=tiny < %s 2>&1 | FileCheck %s | ||
| ; RUN: llc -verify-machineinstrs -o - -mtriple=aarch64-none-eabi -code-model=tiny < %s 2>&1 | FileCheck %s | ||
| ; RUN: not llc -verify-machineinstrs -o - -mtriple=arm64-apple-darwin -code-model=tiny < %s 2>&1 | FileCheck %s --check-prefix=NOTINY | ||
| ; RUN: not llc -verify-machineinstrs -o - -mtriple=arm64-apple-ios -code-model=tiny < %s 2>&1 | FileCheck %s --check-prefix=NOTINY | ||
| ; RUN: not llc -verify-machineinstrs -o - -mtriple=aarch64-unknown-windows-msvc -code-model=tiny < %s 2>&1 | FileCheck %s --check-prefix=NOTINY | ||
|
|
||
| ; CHECK-NOT: tiny code model is only supported on ELF | ||
| ; CHECK-LABEL: foo | ||
| ; NOTINY: tiny code model is only supported on ELF | ||
|
|
||
| define void @foo() { | ||
| ret void | ||
| } |