Summary: Use TE SMC instead of TC SMC in large code model mode, so that large code model TOC entries could get placed after all the small code model TOC entries, which reduces the chance of TOC overflow. Reviewed By: Xiangling_L Differential Revision: https://reviews.llvm.org/D85455
49 lines
1.2 KiB
LLVM
49 lines
1.2 KiB
LLVM
; RUN: llc -verify-machineinstrs -mcpu=pwr7 -mtriple powerpc-ibm-aix-xcoff \
|
|
; RUN: -code-model=small < %s | FileCheck %s --check-prefix=SMALL
|
|
|
|
; RUN: llc -verify-machineinstrs -mcpu=pwr7 -mtriple powerpc-ibm-aix-xcoff \
|
|
; RUN: -code-model=large < %s | FileCheck %s --check-prefix=LARGE
|
|
|
|
@a = common global i32 0
|
|
|
|
define i32 @test_load() {
|
|
entry:
|
|
%0 = load i32, i32* @a
|
|
ret i32 %0
|
|
}
|
|
|
|
; SMALL-LABEL: .test_load:{{$}}
|
|
; SMALL: lwz [[REG1:[0-9]+]], L..C0(2)
|
|
; SMALL: lwz [[REG2:[0-9]+]], 0([[REG1]])
|
|
; SMALL: blr
|
|
|
|
; LARGE-LABEL: .test_load:{{$}}
|
|
; LARGE: addis [[REG1:[0-9]+]], L..C0@u(2)
|
|
; LARGE: lwz [[REG2:[0-9]+]], L..C0@l([[REG1]])
|
|
; LARGE: lwz [[REG3:[0-9]+]], 0([[REG2]])
|
|
; LARGE: blr
|
|
|
|
@b = common global i32 0
|
|
|
|
define void @test_store(i32 %0) {
|
|
store i32 %0, i32* @b
|
|
ret void
|
|
}
|
|
|
|
; SMALL-LABEL: .test_store:{{$}}
|
|
; SMALL: lwz [[REG1:[0-9]+]], L..C1(2)
|
|
; SMALL: stw [[REG2:[0-9]+]], 0([[REG1]])
|
|
; SMALL: blr
|
|
|
|
; LARGE-LABEL: .test_store:{{$}}
|
|
; LARGE: addis [[REG1:[0-9]+]], L..C1@u(2)
|
|
; LARGE: lwz [[REG2:[0-9]+]], L..C1@l([[REG1]])
|
|
; LARGE: stw [[REG3:[0-9]+]], 0([[REG2]])
|
|
; LARGE: blr
|
|
|
|
; SMALL: .tc a[TC],a
|
|
; SMALL: .tc b[TC],b
|
|
|
|
; LARGE: .tc a[TE],a
|
|
; LARGE: .tc b[TE],b
|