brintos

brintos / llvm-project-archived public Read only

0
0
Text · 1.8 KiB · 7bbc67f Raw
56 lines · cpp
1// A contrived example to test the double jump removal peephole.2 3// RUN: %clangxx %cxxflags -O0 %s -o %t.exe4// RUN: llvm-bolt %t.exe -o %t.bolt --peepholes=double-jumps | \5// RUN:   FileCheck %s -check-prefix=CHECKBOLT6// RUN: llvm-objdump --no-print-imm-hex -d %t.bolt | FileCheck %s7 8// CHECKBOLT: BOLT-INFO: Peephole: 1 double jumps patched.9 10// CHECK: <_Z3foom>:11// CHECK-NEXT: sub     sp, sp, #1612// CHECK-NEXT: str     x0, [sp, #8]13// CHECK-NEXT: ldr     [[REG:x[0-28]+]], [sp, #8]14// CHECK-NEXT: cmp     [[REG]], #015// CHECK-NEXT: b.eq    {{.*}} <_Z3foom+0x34>16// CHECK-NEXT: add     [[REG]], [[REG]], #117// CHECK-NEXT: add     [[REG]], [[REG]], #118// CHECK-NEXT: cmp     [[REG]], #219// CHECK-NEXT: b.eq    {{.*}} <_Z3foom+0x28>20// CHECK-NEXT: add     [[REG]], [[REG]], #121// CHECK-NEXT: mov     [[REG]], x122// CHECK-NEXT: ldr     x1, [sp]23// CHECK-NEXT: b       {{.*}} <bar>24// CHECK-NEXT: ldr     x1, [sp]25// CHECK-NEXT: add     [[REG]], [[REG]], #126// CHECK-NEXT: b       {{.*}} <bar>27 28extern "C" unsigned long bar(unsigned long count) { return count + 1; }29 30unsigned long foo(unsigned long count) {31  asm volatile("     cmp %0,#0\n"32               "     b.eq .L7\n"33               "     add %0, %0, #1\n"34               "     b .L1\n"35               ".L1: b .L2\n"36               ".L2: add  %0, %0, #1\n"37               "     cmp  %0, #2\n"38               "     b.ne .L3\n"39               "     b .L4\n"40               ".L3: b .L5\n"41               ".L5: add %0, %0, #1\n"42               ".L4: mov %0,x1\n"43               "     ldr x1, [sp]\n"44               "     b .L6\n"45               ".L7: ldr x1, [sp]\n"46               "     add %0, %0, #1\n"47               "     b .L6\n"48               ".L6: b bar\n"49               :50               : "r"(count)51               :);52  return count;53}54 55extern "C" int _start() { return foo(38); }56