mirror of
https://github.com/intel/llvm.git
synced 2026-01-19 01:15:50 +08:00
Bugfix for splitting critical edges in shrink wrapping
Summary: Fix issue with splitting critical edges originating at the same BB in ShrinkWrapping::splitFrontierCritEdges. Splitting of critical edges originating at the same FromBB wasn't handled correctly as the Frontier at index corresponding to FromBB was overwritten with basic blocks created for multiple DestinationBBs. (cherry picked from FBD23232398)
This commit is contained in:
committed by
Maksim Panchenko
parent
9bc4a8db18
commit
8c4ba8f165
@@ -924,14 +924,20 @@ void ShrinkWrapping::splitFrontierCritEdges(
|
||||
const SmallVector<SmallVector<BinaryBasicBlock *, 4>, 4> &To) {
|
||||
DEBUG(dbgs() << "splitFrontierCritEdges: Now handling func "
|
||||
<< BF.getPrintName() << "\n");
|
||||
for (size_t I = 0; I < Frontier.size(); ++I) {
|
||||
// For every FromBB, there might be one or more critical edges, with
|
||||
// To[I] containing destination BBs. It's important to memorize
|
||||
// the original size of the Frontier as we may append to it while splitting
|
||||
// critical edges originating with blocks with multiple destinations.
|
||||
for (size_t I = 0, IE = Frontier.size(); I < IE; ++I) {
|
||||
if (!IsCritEdge[I])
|
||||
continue;
|
||||
if (To[I].empty())
|
||||
continue;
|
||||
auto FromBB = From[I];
|
||||
DEBUG(dbgs() << " - Now handling FrontierBB " << FromBB->getName() << "\n");
|
||||
for (auto DestinationBB : To[I]) {
|
||||
// Split edge for every DestinationBBs
|
||||
for (size_t DI = 0, DIE = To[I].size(); DI < DIE; ++DI) {
|
||||
auto DestinationBB = To[I][DI];
|
||||
DEBUG(dbgs() << " - Dest : " << DestinationBB->getName() << "\n");
|
||||
auto *NewBB = Func->splitEdge(FromBB, DestinationBB);
|
||||
// Insert dummy instruction so this BB is never empty (we need this for
|
||||
@@ -945,7 +951,16 @@ void ShrinkWrapping::splitFrontierCritEdges(
|
||||
}
|
||||
|
||||
// Update frontier
|
||||
Frontier[I] = ProgramPoint::getLastPointAt(*NewBB);
|
||||
auto NewFrontierPP = ProgramPoint::getLastPointAt(*NewBB);
|
||||
if (DI == 0) {
|
||||
// Update frontier inplace
|
||||
Frontier[I] = NewFrontierPP;
|
||||
DEBUG(dbgs() << " - Update frontier with " << NewBB->getName() << '\n');
|
||||
} else {
|
||||
// Append new frontier to the end of the list
|
||||
Frontier.push_back(NewFrontierPP);
|
||||
DEBUG(dbgs() << " - Append frontier " << NewBB->getName() << '\n');
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
754
bolt/test/X86/shrinkwrapping-critedge.s
Normal file
754
bolt/test/X86/shrinkwrapping-critedge.s
Normal file
@@ -0,0 +1,754 @@
|
||||
# This reproduces a bug with shrink wrapping when trying to split critical
|
||||
# edges originating at the same basic block.
|
||||
|
||||
# REQUIRES: system-linux
|
||||
|
||||
# RUN: llvm-mc -filetype=obj -triple x86_64-unknown-unknown \
|
||||
# RUN: %s -o %t.o
|
||||
# RUN: link_fdata %s %t.o %t.fdata
|
||||
# RUN: strip --strip-unneeded %t.o
|
||||
# RUN: %host_cc %t.o -o %t.exe -Wl,-q -nostdlib
|
||||
# RUN: llvm-bolt %t.exe -relocs -o %t.out -data %t.fdata \
|
||||
# RUN: -frame-opt=all -debug-only=shrinkwrapping \
|
||||
# RUN: -simplify-conditional-tail-calls=false -eliminate-unreachable=false \
|
||||
# RUN: 2>&1 | FileCheck %s
|
||||
|
||||
# CHECK: - Now handling FrontierBB .LFT{{.*}}
|
||||
# CHECK-NEXT: - Dest : .Ltmp{{.*}}
|
||||
# CHECK-NEXT: - Update frontier with .LSplitEdge{{.*}}
|
||||
# CHECK-NEXT: - Dest : .Ltmp{{.*}}
|
||||
# CHECK-NEXT: - Append frontier .LSplitEdge{{.*}}
|
||||
|
||||
.text
|
||||
.globl main
|
||||
.type main, %function
|
||||
.p2align 4
|
||||
.globl _start
|
||||
_start:
|
||||
main:
|
||||
# FDATA: 0 [unknown] 0 1 main 0 0 186
|
||||
LBB074208:
|
||||
pushq %rbp
|
||||
movl %esi, %eax
|
||||
shrw $0x8, %ax
|
||||
movq %rsp, %rbp
|
||||
pushq %r14
|
||||
pushq %r13
|
||||
pushq %r12
|
||||
pushq %rbx
|
||||
movl %edi, %ebx
|
||||
cmpb $0xd, %al
|
||||
LBB074208j:
|
||||
ja Ltmp12774
|
||||
# FDATA: 1 main #LBB074208j# 1 main #Ltmp12774# 0 0
|
||||
# FDATA: 1 main #LBB074208j# 1 main #LFT773198# 0 137
|
||||
|
||||
LFT773198:
|
||||
movzbl %al, %ecx
|
||||
LFT773198j:
|
||||
jmpq *"JUMP_TABLE0"(,%rcx,8)
|
||||
# FDATA: 1 main #LFT773198j# 1 main #Ltmp12774# 5 154
|
||||
# FDATA: 1 main #LFT773198j# 1 main #Ltmp12780# 2 3
|
||||
# FDATA: 1 main #LFT773198j# 1 main #Ltmp12779# 2 2
|
||||
# FDATA: 1 main #LFT773198j# 1 main #Ltmp12775# 0 0
|
||||
# FDATA: 1 main #LFT773198j# 1 main #Ltmp12776# 0 0
|
||||
# FDATA: 1 main #LFT773198j# 1 main #Ltmp12784# 0 0
|
||||
# FDATA: 1 main #LFT773198j# 1 main #Ltmp12778# 0 0
|
||||
# FDATA: 1 main #LFT773198j# 1 main #Ltmp12783# 0 0
|
||||
# FDATA: 1 main #LFT773198j# 1 main #Ltmp12777# 0 0
|
||||
# FDATA: 1 main #LFT773198j# 1 main #Ltmp12781# 0 0
|
||||
# FDATA: 1 main #LFT773198j# 1 main #Ltmp12782# 0 0
|
||||
|
||||
Ltmp12774:
|
||||
cmpw $0xff, %si
|
||||
Ltmp12774j:
|
||||
jne Ltmp1027620
|
||||
# FDATA: 1 main #Ltmp12774j# 1 main #Ltmp1027620# 65 113
|
||||
# FDATA: 1 main #Ltmp12774j# 1 main #LFT773204# 0 44
|
||||
|
||||
LFT773204:
|
||||
cmpb $0xc, %bl
|
||||
LFT773204j:
|
||||
je Ltmp1027621
|
||||
# FDATA: 1 main #LFT773204j# 1 main #Ltmp1027621# 0 0
|
||||
# FDATA: 1 main #LFT773204j# 1 main #Ltmp1027620# 0 44
|
||||
|
||||
Ltmp1027620:
|
||||
cmpb $0xe, %bl
|
||||
Ltmp1027620j:
|
||||
je Ltmp1027622
|
||||
# FDATA: 1 main #Ltmp1027620j# 1 main #Ltmp1027622# 0 0
|
||||
# FDATA: 1 main #Ltmp1027620j# 1 main #LFT773251# 0 155
|
||||
|
||||
LFT773251:
|
||||
cmpw $0xfd, %si
|
||||
LFT773251j:
|
||||
je Ltmp1027623
|
||||
# FDATA: 1 main #LFT773251j# 1 main #Ltmp1027623# 0 0
|
||||
# FDATA: 1 main #LFT773251j# 1 main #LFT773287# 0 155
|
||||
|
||||
LFT773287:
|
||||
cmpw $0x3, %si
|
||||
LFT773287j:
|
||||
je Ltmp1027624
|
||||
# FDATA: 1 main #LFT773287j# 1 main #Ltmp1027624# 58 66
|
||||
# FDATA: 1 main #LFT773287j# 1 main #LFT773295# 0 91
|
||||
|
||||
LFT773295:
|
||||
cmpb %sil, %bl
|
||||
LFT773295j:
|
||||
jne Ltmp1027625
|
||||
# FDATA: 1 main #LFT773295j# 1 main #Ltmp1027625# 17 21
|
||||
# FDATA: 1 main #LFT773295j# 1 main #Ltmp12775# 0 71
|
||||
|
||||
Ltmp12775:
|
||||
xorl %eax, %eax
|
||||
# FDATA: 1 main #Ltmp12775# 1 main #Ltmp1027626# 0 74
|
||||
|
||||
Ltmp1027626:
|
||||
popq %rbx
|
||||
popq %r12
|
||||
popq %r13
|
||||
popq %r14
|
||||
popq %rbp
|
||||
retq
|
||||
|
||||
Ltmp1027625:
|
||||
testb %sil, %bl
|
||||
Ltmp1027625j:
|
||||
jns Ltmp12784
|
||||
# FDATA: 1 main #Ltmp1027625j# 1 main #Ltmp12784# 0 0
|
||||
# FDATA: 1 main #Ltmp1027625j# 1 main #LFT773360# 0 21
|
||||
|
||||
LFT773360:
|
||||
xorl %ebx, %esi
|
||||
xorl %eax, %eax
|
||||
andb $-0x2, %sil
|
||||
setne %al
|
||||
LFT773360j:
|
||||
jmp Ltmp1027626
|
||||
# FDATA: 1 main #LFT773360j# 1 main #Ltmp1027626# 0 22
|
||||
|
||||
Ltmp12776:
|
||||
movl $0x2, %eax
|
||||
cmpb $0x3, %dil
|
||||
Ltmp12776j:
|
||||
je Ltmp1027626
|
||||
# FDATA: 1 main #Ltmp12776j# 1 main #Ltmp1027626# 0 0
|
||||
# FDATA: 1 main #Ltmp12776j# 1 main #Ltmp12784# 0 0
|
||||
|
||||
Ltmp12784:
|
||||
movl $0x1, %eax
|
||||
Ltmp12784j:
|
||||
jmp Ltmp1027626
|
||||
# FDATA: 1 main #Ltmp12784j# 1 main #Ltmp1027626# 0 0
|
||||
|
||||
Ltmp12779:
|
||||
xorl %edx, %edx
|
||||
cmpb $0x6, %dil
|
||||
Ltmp12779j:
|
||||
je Ltmp1027627
|
||||
# FDATA: 1 main #Ltmp12779j# 1 main #Ltmp1027627# 0 1
|
||||
# FDATA: 1 main #Ltmp12779j# 1 main #LFT773364# 0 1
|
||||
|
||||
LFT773364:
|
||||
cmpb $-0x3, %dil
|
||||
LFT773364j:
|
||||
setbe %dl
|
||||
# FDATA: 1 main #LFT773364j# 1 main #Ltmp1027627# 0 1
|
||||
|
||||
Ltmp1027627:
|
||||
movzbl %dl, %eax
|
||||
Ltmp1027627j:
|
||||
jmp Ltmp1027626
|
||||
# FDATA: 1 main #Ltmp1027627j# 1 main #Ltmp1027626# 0 2
|
||||
|
||||
Ltmp12780:
|
||||
cmpb $0xe, %dil
|
||||
Ltmp12780j:
|
||||
je Ltmp1027628
|
||||
# FDATA: 1 main #Ltmp12780j# 1 main #Ltmp1027628# 0 0
|
||||
# FDATA: 1 main #Ltmp12780j# 1 main #LFT773437# 0 3
|
||||
|
||||
LFT773437:
|
||||
cmpb $0x0, data1
|
||||
LFT773437j:
|
||||
jne Ltmp1027629
|
||||
# FDATA: 1 main #LFT773437j# 1 main #Ltmp1027629# 0 0
|
||||
# FDATA: 1 main #LFT773437j# 1 main #LFT773496# 0 3
|
||||
|
||||
LFT773496:
|
||||
orl $0x1, %ebx
|
||||
leal 0xd(%rbx), %eax
|
||||
testb $-0x3, %al
|
||||
LFT773496j:
|
||||
je Ltmp12775
|
||||
LFT773496j2:
|
||||
jmp Ltmp12784
|
||||
# FDATA: 1 main #LFT773496j# 1 main #Ltmp12775# 0 3
|
||||
# FDATA: 1 main #LFT773496j2# 1 main #Ltmp12784# 0 0
|
||||
|
||||
Ltmp12778:
|
||||
leal -0x6(%rdi), %esi
|
||||
xorl %eax, %eax
|
||||
andb $-0x3, %sil
|
||||
setne %al
|
||||
Ltmp12778j:
|
||||
jmp Ltmp1027626
|
||||
# FDATA: 1 main #Ltmp12778j# 1 main #Ltmp1027626# 0 0
|
||||
|
||||
Ltmp12783:
|
||||
xorl %eax, %eax
|
||||
cmpb $0x2, %dil
|
||||
sete %al
|
||||
Ltmp12783j:
|
||||
jmp Ltmp1027626
|
||||
# FDATA: 1 main #Ltmp12783j# 1 main #Ltmp1027626# 0 0
|
||||
|
||||
Ltmp1027624:
|
||||
cmpb $0x3, %bl
|
||||
Ltmp1027624j:
|
||||
je Ltmp12786
|
||||
# FDATA: 1 main #Ltmp1027624j# 1 main #Ltmp12786# 23 47
|
||||
# FDATA: 1 main #Ltmp1027624j# 1 main #Ltmp1027654# 0 27
|
||||
|
||||
Ltmp1027654:
|
||||
movl 0x8(%rdx), %r12d
|
||||
leaq 0x10(%rdx), %r14
|
||||
movq %r14, %rdi
|
||||
movq %r12, %r13
|
||||
addq %r14, %r12
|
||||
movq %r12, %rsi
|
||||
callq "func1"
|
||||
testb %al, %al
|
||||
Ltmp1027654j:
|
||||
je Ltmp1027630
|
||||
# FDATA: 1 main #Ltmp1027654j# 1 main #Ltmp1027630# 0 0
|
||||
# FDATA: 1 main #Ltmp1027654j# 1 main #Ltmp1027632# 0 8
|
||||
|
||||
Ltmp1027632:
|
||||
leal 0xe(%rbx), %edx
|
||||
cmpb $0x1c, %dl
|
||||
Ltmp1027632j:
|
||||
ja Ltmp12786
|
||||
# FDATA: 1 main #Ltmp1027632j# 1 main #Ltmp12786# 0 0
|
||||
# FDATA: 1 main #Ltmp1027632j# 1 main #LFT773556# 0 8
|
||||
|
||||
LFT773556:
|
||||
movzbl %dl, %ebx
|
||||
LFT773556j:
|
||||
jmpq *"JUMP_TABLE1"(,%rbx,8)
|
||||
# FDATA: 1 main #LFT773556j# 1 main #Ltmp12785# 0 8
|
||||
# FDATA: 1 main #LFT773556j# 1 main #Ltmp12784# 0 0
|
||||
# FDATA: 1 main #LFT773556j# 1 main #Ltmp12786# 0 0
|
||||
# FDATA: 1 main #LFT773556j# 1 main #Ltmp12787# 0 0
|
||||
# FDATA: 1 main #LFT773556j# 1 main #Ltmp12788# 0 0
|
||||
# FDATA: 1 main #LFT773556j# 1 main #Ltmp12790# 0 0
|
||||
# FDATA: 1 main #LFT773556j# 1 main #Ltmp12789# 0 0
|
||||
|
||||
Ltmp12785:
|
||||
movq %r14, %rdi
|
||||
movq %r12, %rsi
|
||||
callq "func1"
|
||||
xorl $0x1, %eax
|
||||
movzbl %al, %eax
|
||||
Ltmp12785j:
|
||||
jmp Ltmp1027626
|
||||
# FDATA: 1 main #Ltmp12785j# 1 main #Ltmp1027626# 0 16
|
||||
|
||||
Ltmp1027630:
|
||||
movq data3, %rsi
|
||||
testq %rsi, %rsi
|
||||
Ltmp1027630j:
|
||||
je Ltmp1027631
|
||||
# FDATA: 1 main #Ltmp1027630j# 1 main #Ltmp1027631# 0 0
|
||||
# FDATA: 1 main #Ltmp1027630j# 1 main #LFT773658# 0 0
|
||||
|
||||
LFT773658:
|
||||
movl 0x8(%rsi), %r9d
|
||||
leaq 0x10(%rsi), %r10
|
||||
movq %r10, %rsi
|
||||
LFT773658j:
|
||||
addq %r10, %r9
|
||||
# FDATA: 1 main #LFT773658j# 1 main #Ltmp1027644# 0 0
|
||||
|
||||
Ltmp1027644:
|
||||
subq %rsi, %r9
|
||||
movl %r13d, %r11d
|
||||
cmpq %r11, %r9
|
||||
Ltmp1027644j:
|
||||
jne Ltmp12786
|
||||
# FDATA: 1 main #Ltmp1027644j# 1 main #Ltmp12786# 0 0
|
||||
# FDATA: 1 main #Ltmp1027644j# 1 main #LFT773703# 0 0
|
||||
|
||||
LFT773703:
|
||||
movq %r14, %rdi
|
||||
callq func2
|
||||
testl %eax, %eax
|
||||
LFT773703j:
|
||||
je Ltmp1027632
|
||||
# FDATA: 1 main #LFT773703j# 1 main #Ltmp1027632# 0 0
|
||||
# FDATA: 1 main #LFT773703j# 1 main #Ltmp12786# 0 0
|
||||
|
||||
Ltmp12786:
|
||||
movl $0x2, %eax
|
||||
Ltmp12786j:
|
||||
jmp Ltmp1027626
|
||||
# FDATA: 1 main #Ltmp12786j# 1 main #Ltmp1027626# 0 49
|
||||
|
||||
Ltmp12787:
|
||||
movq data4, %rsi
|
||||
testq %rsi, %rsi
|
||||
Ltmp12787j:
|
||||
je Ltmp1027633
|
||||
# FDATA: 1 main #Ltmp12787j# 1 main #Ltmp1027633# 0 0
|
||||
# FDATA: 1 main #Ltmp12787j# 1 main #LFT773765# 0 0
|
||||
|
||||
LFT773765:
|
||||
movl 0x8(%rsi), %r12d
|
||||
leaq 0x10(%rsi), %r9
|
||||
movq %r9, %rsi
|
||||
LFT773765j:
|
||||
addq %r9, %r12
|
||||
# FDATA: 1 main #LFT773765j# 1 main #Ltmp1027643# 0 0
|
||||
|
||||
Ltmp1027643:
|
||||
subq %rsi, %r12
|
||||
cmpq %r12, %r13
|
||||
Ltmp1027643j:
|
||||
je Ltmp1027634
|
||||
# FDATA: 1 main #Ltmp1027643j# 1 main #Ltmp1027634# 0 0
|
||||
# FDATA: 1 main #Ltmp1027643j# 1 main #Ltmp1027638# 0 0
|
||||
|
||||
Ltmp1027638:
|
||||
movq data3, %rsi
|
||||
testq %rsi, %rsi
|
||||
Ltmp1027638j:
|
||||
je Ltmp1027635
|
||||
# FDATA: 1 main #Ltmp1027638j# 1 main #Ltmp1027635# 0 0
|
||||
# FDATA: 1 main #Ltmp1027638j# 1 main #Ltmp1027636# 0 0
|
||||
|
||||
Ltmp1027636:
|
||||
movl 0x8(%rsi), %r10d
|
||||
leaq 0x10(%rsi), %r11
|
||||
movq %r11, %rsi
|
||||
Ltmp1027636j:
|
||||
addq %r11, %r10
|
||||
# FDATA: 1 main #Ltmp1027636j# 1 main #Ltmp1027637# 0 0
|
||||
|
||||
Ltmp1027637:
|
||||
subq %rsi, %r10
|
||||
cmpq %r10, %r13
|
||||
Ltmp1027637j:
|
||||
jne Ltmp12784
|
||||
# FDATA: 1 main #Ltmp1027637j# 1 main #Ltmp12784# 0 0
|
||||
# FDATA: 1 main #Ltmp1027637j# 1 main #LFT773860# 0 0
|
||||
|
||||
LFT773860:
|
||||
movq %r14, %rdi
|
||||
callq func2
|
||||
testl %eax, %eax
|
||||
setne %sil
|
||||
movzbl %sil, %eax
|
||||
LFT773860j:
|
||||
jmp Ltmp1027626
|
||||
# FDATA: 1 main #LFT773860j# 1 main #Ltmp1027626# 0 0
|
||||
|
||||
Ltmp12788:
|
||||
movq data4, %rsi
|
||||
testq %rsi, %rsi
|
||||
Ltmp12788j:
|
||||
jne Ltmp1027636
|
||||
# FDATA: 1 main #Ltmp12788j# 1 main #Ltmp1027636# 0 0
|
||||
# FDATA: 1 main #Ltmp12788j# 1 main #Ltmp1027635# 0 0
|
||||
|
||||
Ltmp1027635:
|
||||
xorl %r10d, %r10d
|
||||
Ltmp1027635j:
|
||||
jmp Ltmp1027637
|
||||
# FDATA: 1 main #Ltmp1027635j# 1 main #Ltmp1027637# 0 0
|
||||
|
||||
Ltmp1027634:
|
||||
movq %r14, %rdi
|
||||
callq func2
|
||||
testl %eax, %eax
|
||||
Ltmp1027634j:
|
||||
je Ltmp12775
|
||||
Ltmp1027634j2:
|
||||
jmp Ltmp1027638
|
||||
# FDATA: 1 main #Ltmp1027634j# 1 main #Ltmp12775# 0 0
|
||||
# FDATA: 1 main #Ltmp1027634j2# 1 main #Ltmp1027638# 0 0
|
||||
|
||||
Ltmp12790:
|
||||
movq %r14, %rdi
|
||||
movq %r12, %rsi
|
||||
callq "func1"
|
||||
testb %al, %al
|
||||
Ltmp12790j:
|
||||
je Ltmp12784
|
||||
# FDATA: 1 main #Ltmp12790j# 1 main #Ltmp12784# 0 0
|
||||
# FDATA: 1 main #Ltmp12790j# 1 main #Ltmp1027628# 0 0
|
||||
|
||||
Ltmp1027628:
|
||||
movl $0x6, %eax
|
||||
Ltmp1027628j:
|
||||
jmp Ltmp1027626
|
||||
# FDATA: 1 main #Ltmp1027628j# 1 main #Ltmp1027626# 0 0
|
||||
|
||||
Ltmp12789:
|
||||
movq data4, %rsi
|
||||
testq %rsi, %rsi
|
||||
Ltmp12789j:
|
||||
je Ltmp1027639
|
||||
# FDATA: 1 main #Ltmp12789j# 1 main #Ltmp1027639# 0 0
|
||||
# FDATA: 1 main #Ltmp12789j# 1 main #LFT774000# 0 0
|
||||
|
||||
LFT774000:
|
||||
movl 0x8(%rsi), %eax
|
||||
leaq 0x10(%rsi), %rdi
|
||||
movq %rdi, %rsi
|
||||
LFT774000j:
|
||||
addq %rdi, %rax
|
||||
# FDATA: 1 main #LFT774000j# 1 main #Ltmp1027642# 0 0
|
||||
|
||||
Ltmp1027642:
|
||||
subq %rsi, %rax
|
||||
cmpq %rax, %r13
|
||||
Ltmp1027642j:
|
||||
je Ltmp1027640
|
||||
# FDATA: 1 main #Ltmp1027642j# 1 main #Ltmp1027640# 0 0
|
||||
# FDATA: 1 main #Ltmp1027642j# 1 main #Ltmp1027646# 0 0
|
||||
|
||||
Ltmp1027646:
|
||||
movq data3, %rsi
|
||||
testq %rsi, %rsi
|
||||
Ltmp1027646j:
|
||||
je Ltmp1027641
|
||||
# FDATA: 1 main #Ltmp1027646j# 1 main #Ltmp1027641# 0 0
|
||||
# FDATA: 1 main #Ltmp1027646j# 1 main #LFT774007# 0 0
|
||||
|
||||
LFT774007:
|
||||
movl 0x8(%rsi), %r8d
|
||||
leaq 0x10(%rsi), %rcx
|
||||
movq %rcx, %rsi
|
||||
LFT774007j:
|
||||
addq %rcx, %r8
|
||||
# FDATA: 1 main #LFT774007j# 1 main #Ltmp1027647# 0 0
|
||||
|
||||
Ltmp1027647:
|
||||
subq %rsi, %r8
|
||||
cmpq %r8, %r13
|
||||
Ltmp1027647j:
|
||||
jne Ltmp12784
|
||||
# FDATA: 1 main #Ltmp1027647j# 1 main #Ltmp12784# 0 0
|
||||
# FDATA: 1 main #Ltmp1027647j# 1 main #LFT774061# 0 0
|
||||
|
||||
LFT774061:
|
||||
movq %r14, %rdi
|
||||
callq func2
|
||||
testl %eax, %eax
|
||||
LFT774061j:
|
||||
jne Ltmp12784
|
||||
# FDATA: 1 main #LFT774061j# 1 main #Ltmp12784# 0 0
|
||||
# FDATA: 1 main #LFT774061j# 1 main #Ltmp1027645# 0 0
|
||||
|
||||
Ltmp1027645:
|
||||
cmpb $0x0, data2
|
||||
movl $0x5, %eax
|
||||
Ltmp1027645j:
|
||||
je Ltmp1027626
|
||||
# FDATA: 1 main #Ltmp1027645j# 1 main #Ltmp1027626# 0 0
|
||||
# FDATA: 1 main #Ltmp1027645j# 1 main #Ltmp1027650# 0 0
|
||||
|
||||
Ltmp1027650:
|
||||
movl $0x4, %eax
|
||||
Ltmp1027650j:
|
||||
jmp Ltmp1027626
|
||||
# FDATA: 1 main #Ltmp1027650j# 1 main #Ltmp1027626# 0 0
|
||||
|
||||
Ltmp1027639:
|
||||
xorl %eax, %eax
|
||||
Ltmp1027639j:
|
||||
jmp Ltmp1027642
|
||||
# FDATA: 1 main #Ltmp1027639j# 1 main #Ltmp1027642# 0 0
|
||||
|
||||
Ltmp1027633:
|
||||
xorl %r12d, %r12d
|
||||
Ltmp1027633j:
|
||||
jmp Ltmp1027643
|
||||
# FDATA: 1 main #Ltmp1027633j# 1 main #Ltmp1027643# 0 0
|
||||
|
||||
Ltmp1027631:
|
||||
xorl %r9d, %r9d
|
||||
Ltmp1027631j:
|
||||
jmp Ltmp1027644
|
||||
# FDATA: 1 main #Ltmp1027631j# 1 main #Ltmp1027644# 0 0
|
||||
|
||||
Ltmp1027640:
|
||||
movq %r14, %rdi
|
||||
callq func2
|
||||
testl %eax, %eax
|
||||
Ltmp1027640j:
|
||||
je Ltmp1027645
|
||||
Ltmp1027640j2:
|
||||
jmp Ltmp1027646
|
||||
# FDATA: 1 main #Ltmp1027640j# 1 main #Ltmp1027645# 0 0
|
||||
# FDATA: 1 main #Ltmp1027640j2# 1 main #Ltmp1027646# 0 0
|
||||
|
||||
Ltmp1027641:
|
||||
xorl %r8d, %r8d
|
||||
Ltmp1027641j:
|
||||
jmp Ltmp1027647
|
||||
# FDATA: 1 main #Ltmp1027641j# 1 main #Ltmp1027647# 0 0
|
||||
|
||||
Ltmp1027629:
|
||||
andl $-0x4, %ebx
|
||||
cmpb $-0x8, %bl
|
||||
Ltmp1027629j:
|
||||
je Ltmp12775
|
||||
Ltmp1027629j2:
|
||||
jmp Ltmp12784
|
||||
# FDATA: 1 main #Ltmp1027629j# 1 main #Ltmp12775# 0 0
|
||||
# FDATA: 1 main #Ltmp1027629j2# 1 main #Ltmp12784# 0 0
|
||||
|
||||
Ltmp12777:
|
||||
cmpb $-0xa, %dil
|
||||
Ltmp12777j:
|
||||
jl Ltmp1027648
|
||||
# FDATA: 1 main #Ltmp12777j# 1 main #Ltmp1027648# 0 0
|
||||
# FDATA: 1 main #Ltmp12777j# 1 main #LFT774116# 0 0
|
||||
|
||||
LFT774116:
|
||||
cmpb $-0x3, %dil
|
||||
LFT774116j:
|
||||
ja Ltmp1027648
|
||||
# FDATA: 1 main #LFT774116j# 1 main #Ltmp1027648# 0 0
|
||||
# FDATA: 1 main #LFT774116j# 1 main #LFT774121# 0 0
|
||||
|
||||
LFT774121:
|
||||
movl %edi, %ecx
|
||||
movl $0x1, %r8d
|
||||
andl $-0x2, %ecx
|
||||
cmpb $-0x6, %cl
|
||||
sete %dil
|
||||
cmpb $0xe, %bl
|
||||
LFT774121j:
|
||||
ja Ltmp1027649
|
||||
# FDATA: 1 main #LFT774121j# 1 main #Ltmp1027649# 0 0
|
||||
# FDATA: 1 main #LFT774121j# 1 main #LFT774198# 0 0
|
||||
|
||||
LFT774198:
|
||||
movl $0x4e08, %r8d
|
||||
movl %ebx, %ecx
|
||||
shrq %cl, %r8
|
||||
notq %r8
|
||||
LFT774198j:
|
||||
andl $0x1, %r8d
|
||||
# FDATA: 1 main #LFT774198j# 1 main #Ltmp1027649# 0 0
|
||||
|
||||
Ltmp1027649:
|
||||
testb %r8b, %r8b
|
||||
Ltmp1027649j:
|
||||
je Ltmp1027648
|
||||
# FDATA: 1 main #Ltmp1027649j# 1 main #Ltmp1027648# 0 0
|
||||
# FDATA: 1 main #Ltmp1027649j# 1 main #LFT774233# 0 0
|
||||
|
||||
LFT774233:
|
||||
movl $0x1, %eax
|
||||
testb %dil, %dil
|
||||
LFT774233j:
|
||||
je Ltmp1027626
|
||||
# FDATA: 1 main #LFT774233j# 1 main #Ltmp1027626# 0 0
|
||||
# FDATA: 1 main #LFT774233j# 1 main #Ltmp1027648# 0 0
|
||||
|
||||
Ltmp1027648:
|
||||
movl $0x3, %eax
|
||||
Ltmp1027648j:
|
||||
jmp Ltmp1027626
|
||||
# FDATA: 1 main #Ltmp1027648j# 1 main #Ltmp1027626# 0 0
|
||||
|
||||
Ltmp1027621:
|
||||
cmpb $0x0, data2
|
||||
movl $0x5, %eax
|
||||
Ltmp1027621j:
|
||||
je Ltmp1027626
|
||||
Ltmp1027621j2:
|
||||
jmp Ltmp1027650
|
||||
# FDATA: 1 main #Ltmp1027621j# 1 main #Ltmp1027626# 0 0
|
||||
# FDATA: 1 main #Ltmp1027621j2# 1 main #Ltmp1027650# 0 0
|
||||
|
||||
Ltmp12781:
|
||||
cmpb $0xe, %dil
|
||||
Ltmp12781j:
|
||||
je Ltmp1027651
|
||||
# FDATA: 1 main #Ltmp12781j# 1 main #Ltmp1027651# 0 0
|
||||
# FDATA: 1 main #Ltmp12781j# 1 main #LFT774325# 0 0
|
||||
|
||||
LFT774325:
|
||||
andl $-0x4, %ebx
|
||||
cmpb $-0x8, %bl
|
||||
setne %dl
|
||||
LFT774325j:
|
||||
jmp Ltmp1027627
|
||||
# FDATA: 1 main #LFT774325j# 1 main #Ltmp1027627# 0 0
|
||||
|
||||
Ltmp12782:
|
||||
cmpb $0xe, %dil
|
||||
Ltmp12782j:
|
||||
je Ltmp1027628
|
||||
# FDATA: 1 main #Ltmp12782j# 1 main #Ltmp1027628# 0 0
|
||||
# FDATA: 1 main #Ltmp12782j# 1 main #LFT774343# 0 0
|
||||
|
||||
LFT774343:
|
||||
xorl %eax, %eax
|
||||
cmpb $-0x4, %dil
|
||||
setge %al
|
||||
LFT774343j:
|
||||
jmp Ltmp1027626
|
||||
# FDATA: 1 main #LFT774343j# 1 main #Ltmp1027626# 0 0
|
||||
|
||||
Ltmp1027622:
|
||||
cmpw $0xfb, %si
|
||||
Ltmp1027622j:
|
||||
jne Ltmp1027652
|
||||
# FDATA: 1 main #Ltmp1027622j# 1 main #Ltmp1027652# 0 0
|
||||
# FDATA: 1 main #Ltmp1027622j# 1 main #Ltmp1027651# 0 0
|
||||
|
||||
Ltmp1027651:
|
||||
cmpb $0x0, data1
|
||||
Ltmp1027651j:
|
||||
je Ltmp12784
|
||||
Ltmp1027651j2:
|
||||
jmp Ltmp1027628
|
||||
# FDATA: 1 main #Ltmp1027651j# 1 main #Ltmp12784# 0 0
|
||||
# FDATA: 1 main #Ltmp1027651j2# 1 main #Ltmp1027628# 0 0
|
||||
|
||||
Ltmp1027623:
|
||||
cmpb $-0x3, %bl
|
||||
Ltmp1027623j:
|
||||
jne Ltmp12784
|
||||
# FDATA: 1 main #Ltmp1027623j# 1 main #Ltmp12784# 0 0
|
||||
# FDATA: 1 main #Ltmp1027623j# 1 main #LFT774382# 0 0
|
||||
|
||||
LFT774382:
|
||||
movl $0x7, %eax
|
||||
LFT774382j:
|
||||
jmp Ltmp1027626
|
||||
# FDATA: 1 main #LFT774382j# 1 main #Ltmp1027626# 0 0
|
||||
|
||||
Ltmp1027652:
|
||||
cmpw $0xf5, %si
|
||||
Ltmp1027652j:
|
||||
je Ltmp1027653
|
||||
# FDATA: 1 main #Ltmp1027652j# 1 main #Ltmp1027653# 0 0
|
||||
# FDATA: 1 main #Ltmp1027652j# 1 main #LFT774387# 0 0
|
||||
|
||||
LFT774387:
|
||||
cmpw $0xa00, %si
|
||||
LFT774387j:
|
||||
je Ltmp1027628
|
||||
# FDATA: 1 main #LFT774387j# 1 main #Ltmp1027628# 0 0
|
||||
# FDATA: 1 main #LFT774387j# 1 main #LFT774414# 0 0
|
||||
|
||||
LFT774414:
|
||||
cmpw $0xfd, %si
|
||||
LFT774414j:
|
||||
je Ltmp12784
|
||||
# FDATA: 1 main #LFT774414j# 1 main #Ltmp12784# 0 0
|
||||
# FDATA: 1 main #LFT774414j# 1 main #LFT774417# 0 0
|
||||
|
||||
LFT774417:
|
||||
cmpw $0x3, %si
|
||||
LFT774417j:
|
||||
je Ltmp1027654
|
||||
# FDATA: 1 main #LFT774417j# 1 main #Ltmp1027654# 0 0
|
||||
# FDATA: 1 main #LFT774417j# 1 main #LFT774505# 0 0
|
||||
|
||||
LFT774505:
|
||||
cmpb $0xe, %sil
|
||||
LFT774505j:
|
||||
je Ltmp12775
|
||||
LFT774505j2:
|
||||
jmp Ltmp12784
|
||||
# FDATA: 1 main #LFT774505j# 1 main #Ltmp12775# 0 0
|
||||
# FDATA: 1 main #LFT774505j2# 1 main #Ltmp12784# 0 0
|
||||
|
||||
Ltmp1027653:
|
||||
cmpb $0x0, data1
|
||||
Ltmp1027653j:
|
||||
jne Ltmp12784
|
||||
Ltmp1027653j2:
|
||||
jmp Ltmp1027628
|
||||
# FDATA: 1 main #Ltmp1027653j# 1 main #Ltmp12784# 0 0
|
||||
# FDATA: 1 main #Ltmp1027653j2# 1 main #Ltmp1027628# 0 0
|
||||
.size main, .-main
|
||||
|
||||
.globl func1
|
||||
.type func1, %function
|
||||
func1:
|
||||
ret
|
||||
.size func1, .-func1
|
||||
|
||||
.globl func2
|
||||
.type func2, %function
|
||||
func2:
|
||||
ret
|
||||
.size func2, .-func2
|
||||
|
||||
.data
|
||||
data1: .asciz "data001"
|
||||
data2: .asciz "data002"
|
||||
data3: .asciz "data003"
|
||||
data4: .asciz "data004"
|
||||
|
||||
.section .rodata
|
||||
.globl JUMP_TABLE0
|
||||
JUMP_TABLE0:
|
||||
.quad Ltmp12774
|
||||
.quad Ltmp12775
|
||||
.quad Ltmp12776
|
||||
.quad Ltmp12776
|
||||
.quad Ltmp12777
|
||||
.quad Ltmp12778
|
||||
.quad Ltmp12779
|
||||
.quad Ltmp12776
|
||||
.quad Ltmp12780
|
||||
.quad Ltmp12781
|
||||
.quad Ltmp12782
|
||||
.quad Ltmp12783
|
||||
.quad Ltmp12784
|
||||
.quad Ltmp12784
|
||||
|
||||
.globl JUMP_TABLE1
|
||||
JUMP_TABLE1:
|
||||
.quad Ltmp12785
|
||||
.quad Ltmp12785
|
||||
.quad Ltmp12785
|
||||
.quad Ltmp12785
|
||||
.quad Ltmp12785
|
||||
.quad Ltmp12785
|
||||
.quad Ltmp12785
|
||||
.quad Ltmp12785
|
||||
.quad Ltmp12785
|
||||
.quad Ltmp12785
|
||||
.quad Ltmp12786
|
||||
.quad Ltmp12784
|
||||
.quad Ltmp12787
|
||||
.quad Ltmp12787
|
||||
.quad Ltmp12784
|
||||
.quad Ltmp12786
|
||||
.quad Ltmp12784
|
||||
.quad Ltmp12786
|
||||
.quad Ltmp12784
|
||||
.quad Ltmp12784
|
||||
.quad Ltmp12788
|
||||
.quad Ltmp12786
|
||||
.quad Ltmp12788
|
||||
.quad Ltmp12784
|
||||
.quad Ltmp12784
|
||||
.quad Ltmp12784
|
||||
.quad Ltmp12789
|
||||
.quad Ltmp12786
|
||||
.quad Ltmp12790
|
||||
|
||||
|
||||
Reference in New Issue
Block a user