mirror of
https://github.com/RPCS3/llvm-mirror.git
synced 2025-01-31 12:41:49 +01:00
7cda25fd8b
The BUNDLE itself should not have side effects, and this is a property of instructions inside the bundle. The hasProperty check already searches for any member instructions, which was pointless since it was overridden by this bit. Allows me to distinguish bundles that have side effects vs. do not in a future patch. Also fixes an unnecessary scheduling barrier in the bundle AMDGPU uses to get PC relative addresses. llvm-svn: 364984
151 lines
4.4 KiB
LLVM
151 lines
4.4 KiB
LLVM
; RUN: llc -mtriple thumbv7--windows-itanium %s -o - | FileCheck %s
|
|
|
|
@i = thread_local global i32 0
|
|
@j = external thread_local global i32
|
|
@k = internal thread_local global i32 0
|
|
@l = hidden thread_local global i32 0
|
|
@m = external hidden thread_local global i32
|
|
@n = thread_local global i16 0
|
|
@o = thread_local global i8 0
|
|
|
|
define i32 @f() {
|
|
%1 = load i32, i32* @i
|
|
ret i32 %1
|
|
}
|
|
|
|
; CHECK: mrc p15, #0, [[TEB:r[0-9]]], c13, c0, #2
|
|
|
|
; CHECK: movw [[TLS_INDEX:r[0-9]]], :lower16:_tls_index
|
|
; CHECK-NEXT: movt [[TLS_INDEX]], :upper16:_tls_index
|
|
; CHECK-NEXT: ldr [[INDEX:r[0-9]]], {{\[}}[[TLS_INDEX]]]
|
|
; CHECK-NEXT: ldr [[TLS_POINTER:r[0-9]]], {{\[}}[[TEB]], #44]
|
|
; CHECK-NEXT: ldr{{.w}} [[TLS:r[0-9]]], {{\[}}[[TLS_POINTER]], [[INDEX]], lsl #2]
|
|
|
|
; CHECK-NEXT: ldr [[SLOT:r[0-9]]], [[CPI:\.LCPI[0-9]+_[0-9]+]]
|
|
|
|
; CHECK-NEXT: ldr r0, {{\[}}[[TLS]], [[SLOT]]]
|
|
|
|
; CHECK: [[CPI]]:
|
|
; CHECK-NEXT: .long i(SECREL32)
|
|
|
|
define i32 @e() {
|
|
%1 = load i32, i32* @j
|
|
ret i32 %1
|
|
}
|
|
|
|
; CHECK: mrc p15, #0, [[TEB:r[0-9]]], c13, c0, #2
|
|
|
|
; CHECK: movw [[TLS_INDEX:r[0-9]]], :lower16:_tls_index
|
|
; CHECK-NEXT: movt [[TLS_INDEX]], :upper16:_tls_index
|
|
; CHECK-NEXT: ldr [[INDEX:r[0-9]]], {{\[}}[[TLS_INDEX]]]
|
|
; CHECK-NEXT: ldr [[TLS_POINTER:r[0-9]]], {{\[}}[[TEB]], #44]
|
|
; CHECK-NEXT: ldr{{.w}} [[TLS:r[0-9]]], {{\[}}[[TLS_POINTER]], [[INDEX]], lsl #2]
|
|
|
|
; CHECK-NEXT: ldr [[SLOT:r[0-9]]], [[CPI:\.LCPI[0-9]+_[0-9]+]]
|
|
|
|
; CHECK-NEXT: ldr r0, {{\[}}[[TLS]], [[SLOT]]]
|
|
|
|
; CHECK: [[CPI]]:
|
|
; CHECK-NEXT: .long j(SECREL32)
|
|
|
|
define i32 @d() {
|
|
%1 = load i32, i32* @k
|
|
ret i32 %1
|
|
}
|
|
|
|
; CHECK: mrc p15, #0, [[TEB:r[0-9]]], c13, c0, #2
|
|
|
|
; CHECK: movw [[TLS_INDEX:r[0-9]]], :lower16:_tls_index
|
|
; CHECK-NEXT: movt [[TLS_INDEX]], :upper16:_tls_index
|
|
; CHECK-NEXT: ldr [[INDEX:r[0-9]]], {{\[}}[[TLS_INDEX]]]
|
|
; CHECK-NEXT: ldr [[TLS_POINTER:r[0-9]]], {{\[}}[[TEB]], #44]
|
|
; CHECK-NEXT: ldr{{.w}} [[TLS:r[0-9]]], {{\[}}[[TLS_POINTER]], [[INDEX]], lsl #2]
|
|
|
|
; CHECK-NEXT: ldr [[SLOT:r[0-9]]], [[CPI:\.LCPI[0-9]+_[0-9]+]]
|
|
|
|
; CHECK-NEXT: ldr r0, {{\[}}[[TLS]], [[SLOT]]]
|
|
|
|
; CHECK: [[CPI]]:
|
|
; CHECK-NEXT: .long k(SECREL32)
|
|
|
|
define i32 @c() {
|
|
%1 = load i32, i32* @l
|
|
ret i32 %1
|
|
}
|
|
|
|
; CHECK: mrc p15, #0, [[TEB:r[0-9]]], c13, c0, #2
|
|
|
|
; CHECK: movw [[TLS_INDEX:r[0-9]]], :lower16:_tls_index
|
|
; CHECK-NEXT: movt [[TLS_INDEX]], :upper16:_tls_index
|
|
; CHECK-NEXT: ldr [[INDEX:r[0-9]]], {{\[}}[[TLS_INDEX]]]
|
|
; CHECK-NEXT: ldr [[TLS_POINTER:r[0-9]]], {{\[}}[[TEB]], #44]
|
|
; CHECK-NEXT: ldr{{.w}} [[TLS:r[0-9]]], {{\[}}[[TLS_POINTER]], [[INDEX]], lsl #2]
|
|
|
|
; CHECK-NEXT: ldr [[SLOT:r[0-9]]], [[CPI:\.LCPI[0-9]+_[0-9]+]]
|
|
|
|
; CHECK-NEXT: ldr r0, {{\[}}[[TLS]], [[SLOT]]]
|
|
|
|
; CHECK: [[CPI]]:
|
|
; CHECK-NEXT: .long l(SECREL32)
|
|
|
|
define i32 @b() {
|
|
%1 = load i32, i32* @m
|
|
ret i32 %1
|
|
}
|
|
|
|
; CHECK: mrc p15, #0, [[TEB:r[0-9]]], c13, c0, #2
|
|
|
|
; CHECK: movw [[TLS_INDEX:r[0-9]]], :lower16:_tls_index
|
|
; CHECK-NEXT: movt [[TLS_INDEX]], :upper16:_tls_index
|
|
; CHECK-NEXT: ldr [[INDEX:r[0-9]]], {{\[}}[[TLS_INDEX]]]
|
|
; CHECK-NEXT: ldr [[TLS_POINTER:r[0-9]]], {{\[}}[[TEB]], #44]
|
|
; CHECK-NEXT: ldr{{.w}} [[TLS:r[0-9]]], {{\[}}[[TLS_POINTER]], [[INDEX]], lsl #2]
|
|
|
|
; CHECK-NEXT: ldr [[SLOT:r[0-9]]], [[CPI:\.LCPI[0-9]+_[0-9]+]]
|
|
|
|
; CHECK-NEXT: ldr r0, {{\[}}[[TLS]], [[SLOT]]]
|
|
|
|
; CHECK: [[CPI]]:
|
|
; CHECK: .long m(SECREL32)
|
|
|
|
define i16 @a() {
|
|
%1 = load i16, i16* @n
|
|
ret i16 %1
|
|
}
|
|
|
|
; CHECK: mrc p15, #0, [[TEB:r[0-9]]], c13, c0, #2
|
|
|
|
; CHECK: movw [[TLS_INDEX:r[0-9]]], :lower16:_tls_index
|
|
; CHECK-NEXT: movt [[TLS_INDEX]], :upper16:_tls_index
|
|
; CHECK-NEXT: ldr [[INDEX:r[0-9]]], {{\[}}[[TLS_INDEX]]]
|
|
; CHECK-NEXT: ldr [[TLS_POINTER:r[0-9]]], {{\[}}[[TEB]], #44]
|
|
; CHECK-NEXT: ldr{{.w}} [[TLS:r[0-9]]], {{\[}}[[TLS_POINTER]], [[INDEX]], lsl #2]
|
|
|
|
; CHECK-NEXT: ldr [[SLOT:r[0-9]]], [[CPI:\.LCPI[0-9]+_[0-9]+]]
|
|
|
|
; CHECK-NEXT: ldrh r0, {{\[}}[[TLS]], [[SLOT]]]
|
|
|
|
; CHECK: [[CPI]]:
|
|
; CHECK: .long n(SECREL32)
|
|
|
|
define i8 @Z() {
|
|
%1 = load i8, i8* @o
|
|
ret i8 %1
|
|
}
|
|
|
|
; CHECK: mrc p15, #0, [[TEB:r[0-9]]], c13, c0, #2
|
|
|
|
; CHECK: movw [[TLS_INDEX:r[0-9]]], :lower16:_tls_index
|
|
; CHECK-NEXT: movt [[TLS_INDEX]], :upper16:_tls_index
|
|
; CHECK-NEXT: ldr [[INDEX:r[0-9]]], {{\[}}[[TLS_INDEX]]]
|
|
; CHECK-NEXT: ldr [[TLS_POINTER:r[0-9]]], {{\[}}[[TEB]], #44]
|
|
; CHECK-NEXT: ldr{{.w}} [[TLS:r[0-9]]], {{\[}}[[TLS_POINTER]], [[INDEX]], lsl #2]
|
|
|
|
; CHECK-NEXT: ldr [[SLOT:r[0-9]]], [[CPI:\.LCPI[0-9]+_[0-9]+]]
|
|
|
|
; CHECK-NEXT: ldrb r0, {{\[}}[[TLS]], [[SLOT]]]
|
|
|
|
; CHECK: [[CPI]]:
|
|
; CHECK-NEXT: .long o(SECREL32)
|
|
|