diff options
Diffstat (limited to 'llvm/test/CodeGen/Mips/xray-mips-attribute-instrumentation.ll')
-rw-r--r-- | llvm/test/CodeGen/Mips/xray-mips-attribute-instrumentation.ll | 147 |
1 files changed, 147 insertions, 0 deletions
diff --git a/llvm/test/CodeGen/Mips/xray-mips-attribute-instrumentation.ll b/llvm/test/CodeGen/Mips/xray-mips-attribute-instrumentation.ll new file mode 100644 index 00000000000..a7c859a1815 --- /dev/null +++ b/llvm/test/CodeGen/Mips/xray-mips-attribute-instrumentation.ll @@ -0,0 +1,147 @@ +; RUN: llc -filetype=asm -o - -mtriple=mips-unknown-linux-gnu < %s | FileCheck --check-prefix=CHECK --check-prefix=CHECK-MIPS32 %s +; RUN: llc -filetype=asm -o - -mtriple=mipsel-unknown-linux-gnu < %s | FileCheck --check-prefix=CHECK --check-prefix=CHECK-MIPS32 %s +; RUN: llc -filetype=asm -o - -mtriple=mips64-unknown-linux-gnu < %s | FileCheck --check-prefix=CHECK --check-prefix=CHECK-MIPS64 %s +; RUN: llc -filetype=asm -o - -mtriple=mips64el-unknown-linux-gnu < %s | FileCheck --check-prefix=CHECK --check-prefix=CHECK-MIPS64 %s + +define i32 @foo() nounwind noinline uwtable "function-instrument"="xray-always" { +; CHECK: .p2align 2 +; CHECK-MIPS64-LABEL: .Lxray_sled_0: +; CHECK-MIPS32-LABEL: $xray_sled_0: +; CHECK-MIPS64: b .Ltmp0 +; CHECK-MIPS32: b $tmp0 +; CHECK-NEXT: nop +; CHECK-NEXT: nop +; CHECK-NEXT: nop +; CHECK-NEXT: nop +; CHECK-NEXT: nop +; CHECK-NEXT: nop +; CHECK-NEXT: nop +; CHECK-NEXT: nop +; CHECK-NEXT: nop +; CHECK-NEXT: nop +; CHECK-NEXT: nop +; CHECK-MIPS64: nop +; CHECK-MIPS64: nop +; CHECK-MIPS64: nop +; CHECK-MIPS64: nop +; CHECK-MIPS64-LABEL: .Ltmp0: +; CHECK-MIPS32-LABEL: $tmp0: +; CHECK-MIPS32: addiu $25, $25, 52 + ret i32 0 +; CHECK: .p2align 2 +; CHECK-MIPS64-LABEL: .Lxray_sled_1: +; CHECK-MIPS32-LABEL: $xray_sled_1: +; CHECK-MIPS64: b .Ltmp1 +; CHECK-MIPS32: b $tmp1 +; CHECK-NEXT: nop +; CHECK-NEXT: nop +; CHECK-NEXT: nop +; CHECK-NEXT: nop +; CHECK-NEXT: nop +; CHECK-NEXT: nop +; CHECK-NEXT: nop +; CHECK-NEXT: nop +; CHECK-NEXT: nop +; CHECK-NEXT: nop +; CHECK-NEXT: nop +; CHECK-MIPS64: nop +; CHECK-MIPS64: nop +; CHECK-MIPS64: nop +; CHECK-MIPS64: nop +; CHECK-MIPS64-LABEL: .Ltmp1: +; CHECK-MIPS32-LABEL: $tmp1: +; CHECK-MIPS32: addiu $25, $25, 52 +} +; CHECK: .section xray_instr_map,{{.*}} +; CHECK-MIPS64: .8byte .Lxray_sled_0 +; CHECK-MIPS64: .8byte .Lxray_sled_1 +; CHECK-MIPS32: .4byte ($xray_sled_0) +; CHECK-MIPS32: .4byte ($xray_sled_1) + +; We test multiple returns in a single function to make sure we're getting all +; of them with XRay instrumentation. +define i32 @bar(i32 %i) nounwind noinline uwtable "function-instrument"="xray-always" { +; CHECK: .p2align 2 +; CHECK-MIPS64-LABEL: .Lxray_sled_2: +; CHECK-MIPS32-LABEL: $xray_sled_2: +; CHECK-MIPS64: b .Ltmp2 +; CHECK-MIPS32: b $tmp2 +; CHECK-NEXT: nop +; CHECK-NEXT: nop +; CHECK-NEXT: nop +; CHECK-NEXT: nop +; CHECK-NEXT: nop +; CHECK-NEXT: nop +; CHECK-NEXT: nop +; CHECK-NEXT: nop +; CHECK-NEXT: nop +; CHECK-NEXT: nop +; CHECK-NEXT: nop +; CHECK-MIPS64: nop +; CHECK-MIPS64: nop +; CHECK-MIPS64: nop +; CHECK-MIPS64: nop +; CHECK-MIPS64-LABEL: .Ltmp2: +; CHECK-MIPS32-LABEL: $tmp2: +; CHECK-MIPS32: addiu $25, $25, 52 +Test: + %cond = icmp eq i32 %i, 0 + br i1 %cond, label %IsEqual, label %NotEqual +IsEqual: + ret i32 0 +; CHECK: .p2align 2 +; CHECK-MIPS64-LABEL: .Lxray_sled_3: +; CHECK-MIPS32-LABEL: $xray_sled_3: +; CHECK-MIPS64: b .Ltmp3 +; CHECK-MIPS32: b $tmp3 +; CHECK-NEXT: nop +; CHECK-NEXT: nop +; CHECK-NEXT: nop +; CHECK-NEXT: nop +; CHECK-NEXT: nop +; CHECK-NEXT: nop +; CHECK-NEXT: nop +; CHECK-NEXT: nop +; CHECK-NEXT: nop +; CHECK-NEXT: nop +; CHECK-NEXT: nop +; CHECK-MIPS64: nop +; CHECK-MIPS64: nop +; CHECK-MIPS64: nop +; CHECK-MIPS64: nop +; CHECK-MIPS64-LABEL: .Ltmp3: +; CHECK-MIPS32-LABEL: $tmp3: +; CHECK-MIPS32: addiu $25, $25, 52 +NotEqual: + ret i32 1 +; CHECK: .p2align 2 +; CHECK-MIPS64-LABEL: .Lxray_sled_4: +; CHECK-MIPS32-LABEL: $xray_sled_4: +; CHECK-MIPS64: b .Ltmp4 +; CHECK-MIPS32: b $tmp4 +; CHECK-NEXT: nop +; CHECK-NEXT: nop +; CHECK-NEXT: nop +; CHECK-NEXT: nop +; CHECK-NEXT: nop +; CHECK-NEXT: nop +; CHECK-NEXT: nop +; CHECK-NEXT: nop +; CHECK-NEXT: nop +; CHECK-NEXT: nop +; CHECK-NEXT: nop +; CHECK-MIPS64: nop +; CHECK-MIPS64: nop +; CHECK-MIPS64: nop +; CHECK-MIPS64: nop +; CHECK-MIPS64-LABEL: .Ltmp4: +; CHECK-MIPS32-LABEL: $tmp4: +; CHECK-MIPS32: addiu $25, $25, 52 +} +; CHECK: .section xray_instr_map,{{.*}} +; CHECK-MIPS64: .8byte .Lxray_sled_2 +; CHECK-MIPS64: .8byte .Lxray_sled_3 +; CHECK-MIPS64: .8byte .Lxray_sled_4 +; CHECK-MIPS32: .4byte ($xray_sled_2) +; CHECK-MIPS32: .4byte ($xray_sled_3) +; CHECK-MIPS32: .4byte ($xray_sled_4) |