xref: /aosp_15_r20/external/llvm/test/CodeGen/Hexagon/tls_pic.ll (revision 9880d6810fe72a1726cb53787c6711e909410d58)
1*9880d681SAndroid Build Coastguard Worker; RUN: llc -O0 -march=hexagon -relocation-model=pic < %s | FileCheck %s
2*9880d681SAndroid Build Coastguard Worker
3*9880d681SAndroid Build Coastguard Worker@dst_ie = thread_local(initialexec) global i32 0, align 4
4*9880d681SAndroid Build Coastguard Worker@src_ie = thread_local(initialexec) global i32 0, align 4
5*9880d681SAndroid Build Coastguard Worker
6*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL:    test_initial_exec
7*9880d681SAndroid Build Coastguard Worker; CHECK-DAG:      = add(pc, ##_GLOBAL_OFFSET_TABLE_@PCREL)
8*9880d681SAndroid Build Coastguard Worker; CHECK-DAG:      = ##src_ie@IEGOT
9*9880d681SAndroid Build Coastguard Worker; CHECK-DAG:      = ##dst_ie@IEGOT
10*9880d681SAndroid Build Coastguard Worker; CHECK-NOT:  call
11*9880d681SAndroid Build Coastguard Workerdefine i32 @test_initial_exec() nounwind {
12*9880d681SAndroid Build Coastguard Workerentry:
13*9880d681SAndroid Build Coastguard Worker  %0 = load i32, i32* @src_ie, align 4
14*9880d681SAndroid Build Coastguard Worker  store i32 %0, i32* @dst_ie, align 4
15*9880d681SAndroid Build Coastguard Worker  ret i32 0
16*9880d681SAndroid Build Coastguard Worker}
17*9880d681SAndroid Build Coastguard Worker
18*9880d681SAndroid Build Coastguard Worker@dst_gd = external thread_local global i32
19*9880d681SAndroid Build Coastguard Worker@src_gd = external thread_local global i32
20*9880d681SAndroid Build Coastguard Worker
21*9880d681SAndroid Build Coastguard Worker; At the moment, the local-dynamic model uses the same code as the
22*9880d681SAndroid Build Coastguard Worker; general-dynamic model.
23*9880d681SAndroid Build Coastguard Worker
24*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_dynamic
25*9880d681SAndroid Build Coastguard Worker; CHECK-DAG:   = add(pc, ##_GLOBAL_OFFSET_TABLE_@PCREL)
26*9880d681SAndroid Build Coastguard Worker; CHECK-DAG:   = ##src_gd@GDGOT
27*9880d681SAndroid Build Coastguard Worker; CHECK-DAG:   = ##dst_gd@GDGOT
28*9880d681SAndroid Build Coastguard Worker; CHECK-DAG:   call src_gd@GDPLT
29*9880d681SAndroid Build Coastguard Worker; CHECK-DAG:   call dst_gd@GDPLT
30*9880d681SAndroid Build Coastguard Worker
31*9880d681SAndroid Build Coastguard Workerdefine i32 @test_dynamic() nounwind {
32*9880d681SAndroid Build Coastguard Workerentry:
33*9880d681SAndroid Build Coastguard Worker  %0 = load i32, i32* @src_gd, align 4
34*9880d681SAndroid Build Coastguard Worker  store i32 %0, i32* @dst_gd, align 4
35*9880d681SAndroid Build Coastguard Worker  ret i32 0
36*9880d681SAndroid Build Coastguard Worker}
37*9880d681SAndroid Build Coastguard Worker
38