xref: /llvm-project/llvm/test/CodeGen/Lanai/codemodel.ll (revision ff9af4c43ad71eeba2cabe99609cfaa0fd54c1d0)
1; RUN: llc -mtriple=lanai < %s | FileCheck %s
2; RUN: llc -mtriple=lanai < %s -code-model=small  | FileCheck -check-prefix CHECK-SMALL %s
3; RUN: not llc -mtriple=lanai < %s -code-model=tiny 2>&1 | FileCheck -check-prefix CHECK-TINY %s
4; RUN: not llc -mtriple=lanai < %s -code-model=kernel 2>&1 | FileCheck -check-prefix CHECK-KERNEL %s
5
6; CHECK-TINY: Target does not support the tiny CodeModel
7; CHECK-KERNEL: Target does not support the kernel CodeModel
8
9@data = external global [0 x i32]		; <[0 x i32]*> [#uses=5]
10
11define i32 @foo() nounwind readonly {
12entry:
13; CHECK-SMALL-LABEL:  foo:
14; CHECK-SMALL: ld [data], %rv
15; CHECK-LABEL:  foo:
16; CHECK: mov hi(data), %r[[REGISTER:[0-9]+]]
17; CHECK: or %r[[REGISTER]], lo(data), %r[[REGISTER]]
18; CHECK: ld 0[%r[[REGISTER]]], %rv
19	%0 = load i32, ptr @data, align 4		; <i32> [#uses=1]
20	ret i32 %0
21}
22
23define i32 @foo1() nounwind readonly {
24entry:
25; CHECK-SMALL-LABEL:  foo1:
26; CHECK-SMALL: mov data, %r[[REGISTER:[0-9]+]]
27; CHECK-SMALL: ld 40[%r[[REGISTER]]], %rv
28; CHECK-LABEL:  foo1:
29; CHECK: mov hi(data), %r[[REGISTER:[0-9]+]]
30; CHECK: or %r[[REGISTER]], lo(data), %r[[REGISTER]]
31; CHECK: ld 40[%r[[REGISTER]]], %rv
32	%0 = load i32, ptr getelementptr ([0 x i32], ptr @data, i32 0, i64 10), align 4		; <i32> [#uses=1]
33	ret i32 %0
34}
35
36@y = local_unnamed_addr global ptr null, section ".ldata,block", align 8
37
38define i32 @foo2() nounwind readonly {
39entry:
40; CHECK-SMALL-LABEL:  foo2:
41; CHECK-SMALL: mov hi(y), %r[[REGISTER:[0-9]+]]
42; CHECK-SMALL: or %r[[REGISTER]], lo(y), %r[[REGISTER]]
43; CHECK-LABEL:  foo2:
44; CHECK: mov hi(y), %r[[REGISTER:[0-9]+]]
45; CHECK: or %r[[REGISTER]], lo(y), %r[[REGISTER]]
46  %0 = load ptr, ptr @y, align 8
47  %1 = load i32, ptr %0, align 4
48  ret i32 %1
49}
50