| ; RUN: llc -mtriple=hexagon -hexagon-small-data-threshold=8 < %s | FileCheck %s | |
| ; RUN: llc -mtriple=hexagon -hexagon-small-data-threshold=0 < %s \ | |
| ; RUN: | FileCheck --check-prefix=NOSDATA %s | |
| ; Test coverage for HexagonTargetObjectFile: exercise the small data/BSS | |
| ; section selection logic. | |
| @small_global = global i32 0, align 4 | |
| @large_global = global [256 x i32] zeroinitializer, align 4 | |
| @small_init = global i32 7, align 4 | |
| ; With small data threshold=8, small globals go into .sdata/.sbss. | |
| ; CHECK-LABEL: test_small_data: | |
| ; CHECK: memw(gp+#small_global) | |
| ; NOSDATA-LABEL: test_small_data: | |
| ; NOSDATA: memw(##small_global) | |
| define i32 @test_small_data() { | |
| entry: | |
| %val = load i32, ptr @small_global, align 4 | |
| ret i32 %val | |
| } | |
| ; Large arrays should NOT go into small data. | |
| ; CHECK-LABEL: test_large_data: | |
| ; CHECK: ##large_global | |
| define i32 @test_large_data() { | |
| entry: | |
| %val = load i32, ptr @large_global, align 4 | |
| ret i32 %val | |
| } | |
| ; Initialized small data should also be accessible via GP. | |
| ; CHECK-LABEL: test_init: | |
| ; CHECK: memw(gp+#small_init) | |
| define i32 @test_init() { | |
| entry: | |
| %val = load i32, ptr @small_init, align 4 | |
| ret i32 %val | |
| } | |