xref: /llvm-project/bolt/test/X86/loop-inversion-pass.s (revision 11791ae7b0b05b8bd8d806331ff51da618912cf8)
179807d99SVladislav Khmelevsky# REQUIRES: system-linux
279807d99SVladislav Khmelevsky
379807d99SVladislav Khmelevsky# RUN: llvm-mc -filetype=obj -triple x86_64-unknown-unknown \
479807d99SVladislav Khmelevsky# RUN:   %s -o %t.o
579807d99SVladislav Khmelevsky# RUN: link_fdata %s %t.o %t.fdata
679807d99SVladislav Khmelevsky# RUN: link_fdata %s %t.o %t.fdata2 "FDATA2"
74609f60eSspupyrev# RUN: link_fdata %s %t.o %t.fdata3 "FDATA3"
8d4fdc981SAmir Ayupov# RUN: %clang %cflags %t.o -o %t.exe -Wl,-q
9d648aa1bSMaksim Panchenko# RUN: llvm-bolt %t.exe --data %t.fdata --reorder-blocks=ext-tsp \
10d648aa1bSMaksim Panchenko# RUN:    --print-finalized --loop-inversion-opt -o %t.out \
11d648aa1bSMaksim Panchenko# RUN:    | FileCheck %s
12d648aa1bSMaksim Panchenko# RUN: llvm-bolt %t.exe --data %t.fdata2 --reorder-blocks=ext-tsp \
13d648aa1bSMaksim Panchenko# RUN:    --print-finalized --loop-inversion-opt -o %t.out2 \
14d648aa1bSMaksim Panchenko# RUN:    | FileCheck --check-prefix="CHECK2" %s
15d648aa1bSMaksim Panchenko# RUN: llvm-bolt %t.exe --data %t.fdata3 --reorder-blocks=none \
16d648aa1bSMaksim Panchenko# RUN:    --print-finalized --loop-inversion-opt -o %t.out3 \
17d648aa1bSMaksim Panchenko# RUN:    | FileCheck --check-prefix="CHECK3" %s
1879807d99SVladislav Khmelevsky
19*11791ae7SSayhaan Siddiqui## The case where the loop is used:
2079807d99SVladislav Khmelevsky# FDATA: 1 main 2 1 main #.J1# 0 420
2179807d99SVladislav Khmelevsky# FDATA: 1 main b 1 main #.Jloop# 0 420
2279807d99SVladislav Khmelevsky# FDATA: 1 main b 1 main d 0 1
2379807d99SVladislav Khmelevsky# CHECK: BB Layout   : .LBB00, .Ltmp0, .Ltmp1, .LFT0
2479807d99SVladislav Khmelevsky
25*11791ae7SSayhaan Siddiqui## The case where the loop is unused:
2679807d99SVladislav Khmelevsky# FDATA2: 1 main 2 1 main #.J1# 0 420
2779807d99SVladislav Khmelevsky# FDATA2: 1 main b 1 main #.Jloop# 0 1
2879807d99SVladislav Khmelevsky# FDATA2: 1 main b 1 main d 0 420
2979807d99SVladislav Khmelevsky# CHECK2: BB Layout   : .LBB00, .Ltmp1, .LFT0, .Ltmp0
3079807d99SVladislav Khmelevsky
31*11791ae7SSayhaan Siddiqui## The case where the loop does not require rotation:
324609f60eSspupyrev# FDATA3: 1 main 2 1 main #.J1# 0 420
334609f60eSspupyrev# FDATA3: 1 main b 1 main #.Jloop# 0 420
344609f60eSspupyrev# FDATA3: 1 main b 1 main d 0 1
354609f60eSspupyrev# CHECK3: BB Layout   : .LBB00, .Ltmp0, .Ltmp1, .LFT0
364609f60eSspupyrev
3779807d99SVladislav Khmelevsky    .text
3879807d99SVladislav Khmelevsky    .globl main
3979807d99SVladislav Khmelevsky    .type main, %function
4079807d99SVladislav Khmelevsky    .size main, .Lend-main
4179807d99SVladislav Khmelevskymain:
4279807d99SVladislav Khmelevsky    xor %eax, %eax
4379807d99SVladislav Khmelevsky    jmp .J1
4479807d99SVladislav Khmelevsky.Jloop:
4579807d99SVladislav Khmelevsky    inc %rax
4679807d99SVladislav Khmelevsky.J1:
4779807d99SVladislav Khmelevsky    cmp $16, %rax
4879807d99SVladislav Khmelevsky    jl .Jloop
4979807d99SVladislav Khmelevsky    retq
50f0f5d19aSMaksim Panchenko
51f0f5d19aSMaksim Panchenko# For relocations against .text
52f0f5d19aSMaksim Panchenko    call exit
5379807d99SVladislav Khmelevsky.Lend:
54