diff options
Diffstat (limited to 'test/CodeGen/SystemZ')
32 files changed, 155 insertions, 38 deletions
diff --git a/test/CodeGen/SystemZ/alias-01.ll b/test/CodeGen/SystemZ/alias-01.ll index 8839aad..89a7318 100644 --- a/test/CodeGen/SystemZ/alias-01.ll +++ b/test/CodeGen/SystemZ/alias-01.ll @@ -14,6 +14,6 @@ define void @f1(<16 x i32> *%src1, <16 x float> *%dest) { ret void } -!0 = metadata !{ metadata !"root" } -!1 = metadata !{ metadata !"set1", metadata !0 } -!2 = metadata !{ metadata !"set2", metadata !0 } +!0 = !{ !"root" } +!1 = !{ !"set1", !0 } +!2 = !{ !"set2", !0 } diff --git a/test/CodeGen/SystemZ/and-08.ll b/test/CodeGen/SystemZ/and-08.ll index 7ded115..a328c4e 100644 --- a/test/CodeGen/SystemZ/and-08.ll +++ b/test/CodeGen/SystemZ/and-08.ll @@ -371,8 +371,8 @@ define void @f26(i64 *%ptr1, i64 *%ptr2) { ret void } -!0 = metadata !{ metadata !"root" } -!1 = metadata !{ metadata !"set1", metadata !0 } -!2 = metadata !{ metadata !"set2", metadata !0 } -!3 = metadata !{ metadata !1, metadata !1, i64 0} -!4 = metadata !{ metadata !2, metadata !2, i64 0} +!0 = !{ !"root" } +!1 = !{ !"set1", !0 } +!2 = !{ !"set2", !0 } +!3 = !{ !1, !1, i64 0} +!4 = !{ !2, !2, i64 0} diff --git a/test/CodeGen/SystemZ/asm-01.ll b/test/CodeGen/SystemZ/asm-01.ll index 801378c..3dbc8ac 100644 --- a/test/CodeGen/SystemZ/asm-01.ll +++ b/test/CodeGen/SystemZ/asm-01.ll @@ -1,7 +1,7 @@ ; Test the "Q" asm constraint, which accepts addresses that have a base ; and a 12-bit displacement. ; -; RUN: llc < %s -mtriple=s390x-linux-gnu | FileCheck %s +; RUN: llc < %s -mtriple=s390x-linux-gnu -no-integrated-as | FileCheck %s ; Check the lowest range. define void @f1(i64 %base) { diff --git a/test/CodeGen/SystemZ/asm-02.ll b/test/CodeGen/SystemZ/asm-02.ll index ad1e35b..458bfeb 100644 --- a/test/CodeGen/SystemZ/asm-02.ll +++ b/test/CodeGen/SystemZ/asm-02.ll @@ -1,7 +1,7 @@ ; Test the "R" asm constraint, which accepts addresses that have a base, ; an index and a 12-bit displacement. ; -; RUN: llc < %s -mtriple=s390x-linux-gnu | FileCheck %s +; RUN: llc < %s -mtriple=s390x-linux-gnu -no-integrated-as | FileCheck %s ; Check the lowest range. define void @f1(i64 %base) { diff --git a/test/CodeGen/SystemZ/asm-03.ll b/test/CodeGen/SystemZ/asm-03.ll index fa3e1a7..2e60ad6 100644 --- a/test/CodeGen/SystemZ/asm-03.ll +++ b/test/CodeGen/SystemZ/asm-03.ll @@ -1,7 +1,7 @@ ; Test the "S" asm constraint, which accepts addresses that have a base ; and a 20-bit displacement. ; -; RUN: llc < %s -mtriple=s390x-linux-gnu | FileCheck %s +; RUN: llc < %s -mtriple=s390x-linux-gnu -no-integrated-as | FileCheck %s define void @f1(i64 %base) { ; CHECK-LABEL: f1: diff --git a/test/CodeGen/SystemZ/asm-04.ll b/test/CodeGen/SystemZ/asm-04.ll index af7ea9f..b212253 100644 --- a/test/CodeGen/SystemZ/asm-04.ll +++ b/test/CodeGen/SystemZ/asm-04.ll @@ -1,7 +1,7 @@ ; Test the "T" asm constraint, which accepts addresses that have a base, ; an index and a 20-bit displacement. ; -; RUN: llc < %s -mtriple=s390x-linux-gnu | FileCheck %s +; RUN: llc < %s -mtriple=s390x-linux-gnu -no-integrated-as | FileCheck %s define void @f1(i64 %base) { ; CHECK-LABEL: f1: diff --git a/test/CodeGen/SystemZ/asm-05.ll b/test/CodeGen/SystemZ/asm-05.ll index e18cb75..db99b10 100644 --- a/test/CodeGen/SystemZ/asm-05.ll +++ b/test/CodeGen/SystemZ/asm-05.ll @@ -1,6 +1,6 @@ ; Test the "m" asm constraint, which is equivalent to "T". ; -; RUN: llc < %s -mtriple=s390x-linux-gnu | FileCheck %s +; RUN: llc < %s -mtriple=s390x-linux-gnu -no-integrated-as | FileCheck %s define void @f1(i64 %base) { ; CHECK-LABEL: f1: diff --git a/test/CodeGen/SystemZ/asm-06.ll b/test/CodeGen/SystemZ/asm-06.ll index f9848a2..73c938f 100644 --- a/test/CodeGen/SystemZ/asm-06.ll +++ b/test/CodeGen/SystemZ/asm-06.ll @@ -1,6 +1,6 @@ ; Test the GPR constraint "a", which forbids %r0. ; -; RUN: llc < %s -mtriple=s390x-linux-gnu | FileCheck %s +; RUN: llc < %s -mtriple=s390x-linux-gnu -no-integrated-as | FileCheck %s define i64 @f1() { ; CHECK-LABEL: f1: diff --git a/test/CodeGen/SystemZ/asm-07.ll b/test/CodeGen/SystemZ/asm-07.ll index bf63150..42b89e6 100644 --- a/test/CodeGen/SystemZ/asm-07.ll +++ b/test/CodeGen/SystemZ/asm-07.ll @@ -1,6 +1,6 @@ ; Test the GPR constraint "r". ; -; RUN: llc < %s -mtriple=s390x-linux-gnu | FileCheck %s +; RUN: llc < %s -mtriple=s390x-linux-gnu -no-integrated-as | FileCheck %s define i64 @f1() { ; CHECK-LABEL: f1: diff --git a/test/CodeGen/SystemZ/asm-08.ll b/test/CodeGen/SystemZ/asm-08.ll index 1662337..4185108 100644 --- a/test/CodeGen/SystemZ/asm-08.ll +++ b/test/CodeGen/SystemZ/asm-08.ll @@ -1,6 +1,6 @@ ; Test the GPR constraint "d", which is equivalent to "r". ; -; RUN: llc < %s -mtriple=s390x-linux-gnu | FileCheck %s +; RUN: llc < %s -mtriple=s390x-linux-gnu -no-integrated-as | FileCheck %s define i64 @f1() { ; CHECK-LABEL: f1: diff --git a/test/CodeGen/SystemZ/asm-09.ll b/test/CodeGen/SystemZ/asm-09.ll index 5cd7efb..b9d86cf 100644 --- a/test/CodeGen/SystemZ/asm-09.ll +++ b/test/CodeGen/SystemZ/asm-09.ll @@ -1,6 +1,6 @@ ; Test matching operands with the GPR constraint "r". ; -; RUN: llc < %s -mtriple=s390x-linux-gnu | FileCheck %s +; RUN: llc < %s -mtriple=s390x-linux-gnu -no-integrated-as | FileCheck %s define void @f1(i32 *%dst) { ; CHECK-LABEL: f1: diff --git a/test/CodeGen/SystemZ/asm-10.ll b/test/CodeGen/SystemZ/asm-10.ll index 0eccc19..b71db83 100644 --- a/test/CodeGen/SystemZ/asm-10.ll +++ b/test/CodeGen/SystemZ/asm-10.ll @@ -1,6 +1,6 @@ ; Test the FPR constraint "f". ; -; RUN: llc < %s -mtriple=s390x-linux-gnu | FileCheck %s +; RUN: llc < %s -mtriple=s390x-linux-gnu -no-integrated-as | FileCheck %s define float @f1() { ; CHECK-LABEL: f1: diff --git a/test/CodeGen/SystemZ/asm-11.ll b/test/CodeGen/SystemZ/asm-11.ll index 8aeb784..8a4cdbb 100644 --- a/test/CodeGen/SystemZ/asm-11.ll +++ b/test/CodeGen/SystemZ/asm-11.ll @@ -1,6 +1,6 @@ ; Test the "I" constraint (8-bit unsigned constants). ; -; RUN: llc < %s -mtriple=s390x-linux-gnu | FileCheck %s +; RUN: llc < %s -mtriple=s390x-linux-gnu -no-integrated-as | FileCheck %s ; Test 1 below the first valid value. define i32 @f1() { diff --git a/test/CodeGen/SystemZ/asm-12.ll b/test/CodeGen/SystemZ/asm-12.ll index feecbac..115092c 100644 --- a/test/CodeGen/SystemZ/asm-12.ll +++ b/test/CodeGen/SystemZ/asm-12.ll @@ -1,6 +1,6 @@ ; Test the "J" constraint (12-bit unsigned constants). ; -; RUN: llc < %s -mtriple=s390x-linux-gnu | FileCheck %s +; RUN: llc < %s -mtriple=s390x-linux-gnu -no-integrated-as | FileCheck %s ; Test 1 below the first valid value. define i32 @f1() { diff --git a/test/CodeGen/SystemZ/asm-13.ll b/test/CodeGen/SystemZ/asm-13.ll index b881700..83454ea 100644 --- a/test/CodeGen/SystemZ/asm-13.ll +++ b/test/CodeGen/SystemZ/asm-13.ll @@ -1,6 +1,6 @@ ; Test the "K" constraint (16-bit signed constants). ; -; RUN: llc < %s -mtriple=s390x-linux-gnu | FileCheck %s +; RUN: llc < %s -mtriple=s390x-linux-gnu -no-integrated-as | FileCheck %s ; Test 1 below the first valid value. define i32 @f1() { diff --git a/test/CodeGen/SystemZ/asm-14.ll b/test/CodeGen/SystemZ/asm-14.ll index bcd8b1e..41b8f40 100644 --- a/test/CodeGen/SystemZ/asm-14.ll +++ b/test/CodeGen/SystemZ/asm-14.ll @@ -1,6 +1,6 @@ ; Test the "L" constraint (20-bit signed constants). ; -; RUN: llc < %s -mtriple=s390x-linux-gnu | FileCheck %s +; RUN: llc < %s -mtriple=s390x-linux-gnu -no-integrated-as | FileCheck %s ; Test 1 below the first valid value. define i32 @f1() { diff --git a/test/CodeGen/SystemZ/asm-15.ll b/test/CodeGen/SystemZ/asm-15.ll index 886ee0e..8361b68 100644 --- a/test/CodeGen/SystemZ/asm-15.ll +++ b/test/CodeGen/SystemZ/asm-15.ll @@ -1,6 +1,6 @@ ; Test the "M" constraint (0x7fffffff) ; -; RUN: llc < %s -mtriple=s390x-linux-gnu | FileCheck %s +; RUN: llc < %s -mtriple=s390x-linux-gnu -no-integrated-as | FileCheck %s ; Test 1 below the valid value. define i32 @f1() { diff --git a/test/CodeGen/SystemZ/asm-16.ll b/test/CodeGen/SystemZ/asm-16.ll index 886ee0e..8361b68 100644 --- a/test/CodeGen/SystemZ/asm-16.ll +++ b/test/CodeGen/SystemZ/asm-16.ll @@ -1,6 +1,6 @@ ; Test the "M" constraint (0x7fffffff) ; -; RUN: llc < %s -mtriple=s390x-linux-gnu | FileCheck %s +; RUN: llc < %s -mtriple=s390x-linux-gnu -no-integrated-as | FileCheck %s ; Test 1 below the valid value. define i32 @f1() { diff --git a/test/CodeGen/SystemZ/asm-17.ll b/test/CodeGen/SystemZ/asm-17.ll index 7bc9da3..533b5e9 100644 --- a/test/CodeGen/SystemZ/asm-17.ll +++ b/test/CodeGen/SystemZ/asm-17.ll @@ -1,6 +1,6 @@ ; Test explicit register names. ; -; RUN: llc < %s -mtriple=s390x-linux-gnu | FileCheck %s +; RUN: llc < %s -mtriple=s390x-linux-gnu -no-integrated-as | FileCheck %s ; Test i32 GPRs. define i32 @f1() { diff --git a/test/CodeGen/SystemZ/asm-18.ll b/test/CodeGen/SystemZ/asm-18.ll index d60654b..71e145a 100644 --- a/test/CodeGen/SystemZ/asm-18.ll +++ b/test/CodeGen/SystemZ/asm-18.ll @@ -1,7 +1,7 @@ ; Test high-word operations, using "h" constraints to force a high ; register and "r" constraints to force a low register. ; -; RUN: llc < %s -mtriple=s390x-linux-gnu -mcpu=z196 | FileCheck %s +; RUN: llc < %s -mtriple=s390x-linux-gnu -mcpu=z196 -no-integrated-as | FileCheck %s ; Test loads and stores involving mixtures of high and low registers. define void @f1(i32 *%ptr1, i32 *%ptr2) { diff --git a/test/CodeGen/SystemZ/fp-cmp-04.ll b/test/CodeGen/SystemZ/fp-cmp-04.ll index 781a3be..1637ccb 100644 --- a/test/CodeGen/SystemZ/fp-cmp-04.ll +++ b/test/CodeGen/SystemZ/fp-cmp-04.ll @@ -1,7 +1,7 @@ ; Test that floating-point compares are omitted if CC already has the ; right value. ; -; RUN: llc < %s -mtriple=s390x-linux-gnu -mcpu=z10 | FileCheck %s +; RUN: llc < %s -mtriple=s390x-linux-gnu -mcpu=z10 -no-integrated-as | FileCheck %s declare float @llvm.fabs.f32(float %f) diff --git a/test/CodeGen/SystemZ/int-cmp-44.ll b/test/CodeGen/SystemZ/int-cmp-44.ll index f065e64..30c1c4f 100644 --- a/test/CodeGen/SystemZ/int-cmp-44.ll +++ b/test/CodeGen/SystemZ/int-cmp-44.ll @@ -1,7 +1,7 @@ ; Test that compares are omitted if CC already has the right value ; (z10 version). ; -; RUN: llc < %s -mtriple=s390x-linux-gnu -mcpu=z10 | FileCheck %s +; RUN: llc < %s -mtriple=s390x-linux-gnu -mcpu=z10 -no-integrated-as | FileCheck %s declare void @foo() diff --git a/test/CodeGen/SystemZ/int-cmp-45.ll b/test/CodeGen/SystemZ/int-cmp-45.ll index 9c9c49c..c9affa6 100644 --- a/test/CodeGen/SystemZ/int-cmp-45.ll +++ b/test/CodeGen/SystemZ/int-cmp-45.ll @@ -1,7 +1,7 @@ ; Test that compares are omitted if CC already has the right value ; (z196 version). ; -; RUN: llc < %s -mtriple=s390x-linux-gnu -mcpu=z196 | FileCheck %s +; RUN: llc < %s -mtriple=s390x-linux-gnu -mcpu=z196 -no-integrated-as | FileCheck %s ; Addition provides enough for equality comparisons with zero. First teest ; the EQ case with LOC. diff --git a/test/CodeGen/SystemZ/memchr-02.ll b/test/CodeGen/SystemZ/memchr-02.ll index 982b396..8986627 100644 --- a/test/CodeGen/SystemZ/memchr-02.ll +++ b/test/CodeGen/SystemZ/memchr-02.ll @@ -1,6 +1,6 @@ ; Test memchr using SRST, with the correct prototype. ; -; RUN: llc < %s -mtriple=s390x-linux-gnu | FileCheck %s +; RUN: llc < %s -mtriple=s390x-linux-gnu -no-integrated-as | FileCheck %s declare i8 *@memchr(i8 *%src, i32 %char, i64 %len) diff --git a/test/CodeGen/SystemZ/memcpy-02.ll b/test/CodeGen/SystemZ/memcpy-02.ll index 2b01091..776cfee 100644 --- a/test/CodeGen/SystemZ/memcpy-02.ll +++ b/test/CodeGen/SystemZ/memcpy-02.ll @@ -385,8 +385,8 @@ define void @f32(i64 *%ptr1, i64 *%ptr2) { ret void } -!0 = metadata !{ metadata !"root" } -!1 = metadata !{ metadata !3, metadata !3, i64 0 } -!2 = metadata !{ metadata !4, metadata !4, i64 0 } -!3 = metadata !{ metadata !"set1", metadata !0 } -!4 = metadata !{ metadata !"set2", metadata !0 } +!0 = !{ !"root" } +!1 = !{ !3, !3, i64 0 } +!2 = !{ !4, !4, i64 0 } +!3 = !{ !"set1", !0 } +!4 = !{ !"set2", !0 } diff --git a/test/CodeGen/SystemZ/tls-01.ll b/test/CodeGen/SystemZ/tls-01.ll index 16bc8f6..da7176c 100644 --- a/test/CodeGen/SystemZ/tls-01.ll +++ b/test/CodeGen/SystemZ/tls-01.ll @@ -1,7 +1,7 @@ -; Test initial-exec TLS accesses. +; Test local-exec TLS accesses. ; -; RUN: llc < %s -mtriple=s390x-linux-gnu | FileCheck %s -check-prefix=CHECK-MAIN -; RUN: llc < %s -mtriple=s390x-linux-gnu | FileCheck %s -check-prefix=CHECK-CP +; RUN: llc < %s -mcpu=z10 -mtriple=s390x-linux-gnu | FileCheck %s -check-prefix=CHECK-MAIN +; RUN: llc < %s -mcpu=z10 -mtriple=s390x-linux-gnu | FileCheck %s -check-prefix=CHECK-CP @x = thread_local global i32 0 diff --git a/test/CodeGen/SystemZ/tls-02.ll b/test/CodeGen/SystemZ/tls-02.ll new file mode 100644 index 0000000..15918d0 --- /dev/null +++ b/test/CodeGen/SystemZ/tls-02.ll @@ -0,0 +1,18 @@ +; Test initial-exec TLS accesses. +; +; RUN: llc < %s -mcpu=z10 -mtriple=s390x-linux-gnu -relocation-model=pic | FileCheck %s -check-prefix=CHECK-MAIN + +@x = thread_local(initialexec) global i32 0 + +; The offset must be loaded from the GOT. This TLS access model does +; not use literal pool constants. +define i32 *@foo() { +; CHECK-MAIN-LABEL: foo: +; CHECK-MAIN: ear [[HIGH:%r[0-5]]], %a0 +; CHECK-MAIN: sllg %r2, [[HIGH]], 32 +; CHECK-MAIN: ear %r2, %a1 +; CHECK-MAIN: larl %r1, x@INDNTPOFF +; CHECK-MAIN: ag %r2, 0(%r1) +; CHECK-MAIN: br %r14 + ret i32 *@x +} diff --git a/test/CodeGen/SystemZ/tls-03.ll b/test/CodeGen/SystemZ/tls-03.ll new file mode 100644 index 0000000..c9f7bd6 --- /dev/null +++ b/test/CodeGen/SystemZ/tls-03.ll @@ -0,0 +1,23 @@ +; Test general-dynamic TLS accesses. +; +; RUN: llc < %s -mcpu=z10 -mtriple=s390x-linux-gnu -relocation-model=pic | FileCheck %s -check-prefix=CHECK-MAIN +; RUN: llc < %s -mcpu=z10 -mtriple=s390x-linux-gnu -relocation-model=pic | FileCheck %s -check-prefix=CHECK-CP + +@x = thread_local global i32 0 + +; Call __tls_get_offset to retrieve the symbol's TLS offset. +define i32 *@foo() { +; CHECK-CP: .LCP{{.*}}: +; CHECK-CP: .quad x@TLSGD +; +; CHECK-MAIN-LABEL: foo: +; CHECK-MAIN-DAG: larl %r12, _GLOBAL_OFFSET_TABLE_ +; CHECK-MAIN-DAG: lgrl %r2, .LCP{{.*}} +; CHECK-MAIN: brasl %r14, __tls_get_offset@PLT:tls_gdcall:x +; CHECK-MAIN: ear [[HIGH:%r[0-5]]], %a0 +; CHECK-MAIN: sllg [[TP:%r[0-5]]], [[HIGH]], 32 +; CHECK-MAIN: ear [[TP]], %a1 +; CHECK-MAIN: agr %r2, [[TP]] +; CHECK-MAIN: br %r14 + ret i32 *@x +} diff --git a/test/CodeGen/SystemZ/tls-04.ll b/test/CodeGen/SystemZ/tls-04.ll new file mode 100644 index 0000000..dcb210a --- /dev/null +++ b/test/CodeGen/SystemZ/tls-04.ll @@ -0,0 +1,28 @@ +; Test local-dynamic TLS accesses. +; +; RUN: llc < %s -mcpu=z10 -mtriple=s390x-linux-gnu -relocation-model=pic | FileCheck %s -check-prefix=CHECK-MAIN +; RUN: llc < %s -mcpu=z10 -mtriple=s390x-linux-gnu -relocation-model=pic | FileCheck %s -check-prefix=CHECK-CP + +@x = thread_local(localdynamic) global i32 0 + +; Call __tls_get_offset to retrieve the module's TLS base offset. +; Add the per-symbol offset and the thread pointer. +define i32 *@foo() { +; CHECK-CP: .LCP{{.*}}_0: +; CHECK-CP: .quad x@TLSLDM +; CHECK-CP: .LCP{{.*}}_1: +; CHECK-CP: .quad x@DTPOFF +; +; CHECK-MAIN-LABEL: foo: +; CHECK-MAIN-DAG: larl %r12, _GLOBAL_OFFSET_TABLE_ +; CHECK-MAIN-DAG: lgrl %r2, .LCP{{.*}}_0 +; CHECK-MAIN: brasl %r14, __tls_get_offset@PLT:tls_ldcall:x +; CHECK-MAIN: larl %r1, .LCP{{.*}}_1 +; CHECK-MAIN: ag %r2, 0(%r1) +; CHECK-MAIN: ear [[HIGH:%r[0-5]]], %a0 +; CHECK-MAIN: sllg [[TP:%r[0-5]]], [[HIGH]], 32 +; CHECK-MAIN: ear [[TP]], %a1 +; CHECK-MAIN: agr %r2, [[TP]] +; CHECK-MAIN: br %r14 + ret i32 *@x +} diff --git a/test/CodeGen/SystemZ/tls-05.ll b/test/CodeGen/SystemZ/tls-05.ll new file mode 100644 index 0000000..385208d --- /dev/null +++ b/test/CodeGen/SystemZ/tls-05.ll @@ -0,0 +1,15 @@ +; Test general-dynamic TLS access optimizations. +; +; If we access the same TLS variable twice, there should only be +; a single call to __tls_get_offset. +; +; RUN: llc < %s -mcpu=z10 -mtriple=s390x-linux-gnu -relocation-model=pic | grep "__tls_get_offset" | count 1 + +@x = thread_local global i32 0 + +define i32 @foo() { + %val = load i32* @x + %inc = add nsw i32 %val, 1 + store i32 %inc, i32* @x + ret i32 %val +} diff --git a/test/CodeGen/SystemZ/tls-06.ll b/test/CodeGen/SystemZ/tls-06.ll new file mode 100644 index 0000000..fcd8614 --- /dev/null +++ b/test/CodeGen/SystemZ/tls-06.ll @@ -0,0 +1,17 @@ +; Test general-dynamic TLS access optimizations. +; +; If we access two different TLS variables, we need two calls to +; __tls_get_offset, but should load _GLOBAL_OFFSET_TABLE only once. +; +; RUN: llc < %s -mcpu=z10 -mtriple=s390x-linux-gnu -relocation-model=pic | grep "__tls_get_offset" | count 2 +; RUN: llc < %s -mcpu=z10 -mtriple=s390x-linux-gnu -relocation-model=pic | grep "_GLOBAL_OFFSET_TABLE_" | count 1 + +@x = thread_local global i32 0 +@y = thread_local global i32 0 + +define i32 @foo() { + %valx = load i32* @x + %valy = load i32* @y + %add = add nsw i32 %valx, %valy + ret i32 %add +} diff --git a/test/CodeGen/SystemZ/tls-07.ll b/test/CodeGen/SystemZ/tls-07.ll new file mode 100644 index 0000000..6547515 --- /dev/null +++ b/test/CodeGen/SystemZ/tls-07.ll @@ -0,0 +1,16 @@ +; Test local-dynamic TLS access optimizations. +; +; If we access two different local-dynamic TLS variables, we only +; need a single call to __tls_get_offset. +; +; RUN: llc < %s -mcpu=z10 -mtriple=s390x-linux-gnu -relocation-model=pic | grep "__tls_get_offset" | count 1 + +@x = thread_local(localdynamic) global i32 0 +@y = thread_local(localdynamic) global i32 0 + +define i32 @foo() { + %valx = load i32* @x + %valy = load i32* @y + %add = add nsw i32 %valx, %valy + ret i32 %add +} |