38 lines
		
	
	
		
			1.0 KiB
		
	
	
	
		
			LLVM
		
	
	
	
			
		
		
	
	
			38 lines
		
	
	
		
			1.0 KiB
		
	
	
	
		
			LLVM
		
	
	
	
| ; RUN: llc -O0 -march=hexagon -relocation-model=pic < %s | FileCheck %s
 | |
| 
 | |
| @dst_ie = thread_local(initialexec) global i32 0, align 4
 | |
| @src_ie = thread_local(initialexec) global i32 0, align 4
 | |
| 
 | |
| ; CHECK-LABEL:    test_initial_exec
 | |
| ; CHECK-DAG:      = add(pc,##_GLOBAL_OFFSET_TABLE_@PCREL)
 | |
| ; CHECK-DAG:      ##src_ie@IEGOT
 | |
| ; CHECK-DAG:      ##dst_ie@IEGOT
 | |
| ; CHECK-NOT:  call
 | |
| define i32 @test_initial_exec() nounwind {
 | |
| entry:
 | |
|   %0 = load i32, i32* @src_ie, align 4
 | |
|   store i32 %0, i32* @dst_ie, align 4
 | |
|   ret i32 0
 | |
| }
 | |
| 
 | |
| @dst_gd = external thread_local global i32
 | |
| @src_gd = external thread_local global i32
 | |
| 
 | |
| ; At the moment, the local-dynamic model uses the same code as the
 | |
| ; general-dynamic model.
 | |
| 
 | |
| ; CHECK-LABEL: test_dynamic
 | |
| ; CHECK-DAG:   = add(pc,##_GLOBAL_OFFSET_TABLE_@PCREL)
 | |
| ; CHECK-DAG:   ##src_gd@GDGOT
 | |
| ; CHECK-DAG:   ##dst_gd@GDGOT
 | |
| ; CHECK-DAG:   call src_gd@GDPLT
 | |
| ; CHECK-DAG:   call dst_gd@GDPLT
 | |
| 
 | |
| define i32 @test_dynamic() nounwind {
 | |
| entry:
 | |
|   %0 = load i32, i32* @src_gd, align 4
 | |
|   store i32 %0, i32* @dst_gd, align 4
 | |
|   ret i32 0
 | |
| }
 | |
| 
 |