| REQUIRES: system-linux |
| |
| RUN: %clangxx %cxxflags -pie -fPIC %p/Inputs/pie-exceptions-failed-split.s \ |
| RUN: -Wl,-q -o %t |
| RUN: llvm-bolt %t -o %t.instr --instrument --instrumentation-file=%t.fdata |
| |
| ## Record profile with invocation that does not throw exceptions. |
| RUN: %t.instr |
| |
| RUN: llvm-bolt %t -o %t.bolt --data %t.fdata --reorder-blocks=ext-tsp \ |
| RUN: --split-functions --split-eh --print-after-lowering \ |
| RUN: --print-only=_Z10throw_testiPPc 2>&1 | FileCheck %s |
| |
| ## Hot code in the test case gets larger after splitting because of jump |
| ## instruction relaxation. Check that BOLT reverts the split correctly. |
| CHECK: Binary Function "_Z10throw_testiPPc" |
| CHECK: IsSplit : |
| CHECK-SAME: 0 |
| |
| ## Check that the landing pad trampoline was created, but contains no |
| ## instructions and falls to the real landing pad. |
| CHECK: {{^[^[:space:]]+}} (0 instructions |
| CHECK-NEXT: Landing Pad{{$}} |
| CHECK: Exec Count |
| CHECK-SAME: : 0 |
| CHECK: Successors: |
| CHECK-SAME: [[LP:[^[:space:]]+]] |
| CHECK-EMPTY: |
| CHECK-NEXT: [[LP]] |
| CHECK-DAG: Exec Count |
| CHECK-NOT: Exec Count |
| CHECK-DAG: callq __cxa_begin_catch |
| |
| ## Verify the output still executes correctly when the exception path is being |
| ## taken. |
| RUN: %t.bolt arg1 arg2 arg3 |