1; RUN: llc -mtriple=mips-unknown-linux-gnu < %s | FileCheck --check-prefix=CHECK --check-prefix=CHECK-MIPS32 %s 2; RUN: llc -mtriple=mipsel-unknown-linux-gnu < %s | FileCheck --check-prefix=CHECK --check-prefix=CHECK-MIPS32 %s 3; RUN: llc -mtriple=mips64-unknown-linux-gnu < %s | FileCheck --check-prefix=CHECK --check-prefix=CHECK-MIPS64 %s 4; RUN: llc -mtriple=mips64el-unknown-linux-gnu < %s | FileCheck --check-prefix=CHECK --check-prefix=CHECK-MIPS64 %s 5 6define i32 @foo() nounwind noinline uwtable "function-instrument"="xray-always" { 7; CHECK: .p2align 2 8; CHECK-MIPS64-LABEL: .Lxray_sled_0: 9; CHECK-MIPS32-LABEL: $xray_sled_0: 10; CHECK-NEXT: b [[TMP:(\.L|\$)tmp[0-9]+]] 11; CHECK-NEXT: nop 12; CHECK-NEXT: nop 13; CHECK-NEXT: nop 14; CHECK-NEXT: nop 15; CHECK-NEXT: nop 16; CHECK-NEXT: nop 17; CHECK-NEXT: nop 18; CHECK-NEXT: nop 19; CHECK-NEXT: nop 20; CHECK-NEXT: nop 21; CHECK-NEXT: nop 22; CHECK-MIPS64: nop 23; CHECK-MIPS64: nop 24; CHECK-MIPS64: nop 25; CHECK-MIPS64: nop 26; CHECK-NEXT: [[TMP]]: 27; CHECK-MIPS32-NEXT: addiu $25, $25, 52 28 ret i32 0 29; CHECK: .p2align 2 30; CHECK-MIPS64-LABEL: .Lxray_sled_1: 31; CHECK-MIPS32-LABEL: $xray_sled_1: 32; CHECK-NEXT: b [[TMP:(\.L|\$)tmp[0-9]+]] 33; CHECK-NEXT: nop 34; CHECK-NEXT: nop 35; CHECK-NEXT: nop 36; CHECK-NEXT: nop 37; CHECK-NEXT: nop 38; CHECK-NEXT: nop 39; CHECK-NEXT: nop 40; CHECK-NEXT: nop 41; CHECK-NEXT: nop 42; CHECK-NEXT: nop 43; CHECK-NEXT: nop 44; CHECK-MIPS64: nop 45; CHECK-MIPS64: nop 46; CHECK-MIPS64: nop 47; CHECK-MIPS64: nop 48; CHECK: [[TMP]]: 49; CHECK-MIPS32: addiu $25, $25, 52 50} 51; CHECK: .section xray_instr_map,"ao",@progbits,foo 52; CHECK-MIPS64: [[TMP:.Ltmp[0-9]+]]: 53; CHECK-MIPS64-NEXT: .8byte .Lxray_sled_0-[[TMP]] 54; CHECK-MIPS64-NEXT: .8byte .Lfunc_begin0-([[TMP]]+8) 55; CHECK-MIPS32: [[TMP:\$tmp[0-9]+]]: 56; CHECK-MIPS32-NEXT: .4byte ($xray_sled_0)-([[TMP]]) 57; CHECK-MIPS32-NEXT: .4byte ($func_begin0)-(([[TMP]])+4) 58 59; We test multiple returns in a single function to make sure we're getting all 60; of them with XRay instrumentation. 61define i32 @bar(i32 %i) nounwind noinline uwtable "function-instrument"="xray-always" { 62; CHECK: .p2align 2 63; CHECK-MIPS64-LABEL: .Lxray_sled_2: 64; CHECK-MIPS32-LABEL: $xray_sled_2: 65; CHECK-NEXT: b [[TMP:(\.L|\$)tmp[0-9]+]] 66; CHECK-NEXT: nop 67; CHECK-NEXT: nop 68; CHECK-NEXT: nop 69; CHECK-NEXT: nop 70; CHECK-NEXT: nop 71; CHECK-NEXT: nop 72; CHECK-NEXT: nop 73; CHECK-NEXT: nop 74; CHECK-NEXT: nop 75; CHECK-NEXT: nop 76; CHECK-NEXT: nop 77; CHECK-MIPS64: nop 78; CHECK-MIPS64: nop 79; CHECK-MIPS64: nop 80; CHECK-MIPS64: nop 81; CHECK: [[TMP]]: 82; CHECK-MIPS32: addiu $25, $25, 52 83Test: 84 %cond = icmp eq i32 %i, 0 85 br i1 %cond, label %IsEqual, label %NotEqual 86IsEqual: 87 ret i32 0 88; CHECK: .p2align 2 89; CHECK-MIPS64-LABEL: .Lxray_sled_3: 90; CHECK-MIPS32-LABEL: $xray_sled_3: 91; CHECK-NEXT: b [[TMP:(\.L|\$)tmp[0-9]+]] 92; CHECK-NEXT: nop 93; CHECK-NEXT: nop 94; CHECK-NEXT: nop 95; CHECK-NEXT: nop 96; CHECK-NEXT: nop 97; CHECK-NEXT: nop 98; CHECK-NEXT: nop 99; CHECK-NEXT: nop 100; CHECK-NEXT: nop 101; CHECK-NEXT: nop 102; CHECK-NEXT: nop 103; CHECK-MIPS64: nop 104; CHECK-MIPS64: nop 105; CHECK-MIPS64: nop 106; CHECK-MIPS64: nop 107; CHECK-NEXT: [[TMP]]: 108; CHECK-MIPS32: addiu $25, $25, 52 109NotEqual: 110 ret i32 1 111; CHECK: .p2align 2 112; CHECK-MIPS64-LABEL: .Lxray_sled_4: 113; CHECK-MIPS32-LABEL: $xray_sled_4: 114; CHECK-NEXT: b [[TMP:(\.L|\$)tmp[0-9]+]] 115; CHECK-NEXT: nop 116; CHECK-NEXT: nop 117; CHECK-NEXT: nop 118; CHECK-NEXT: nop 119; CHECK-NEXT: nop 120; CHECK-NEXT: nop 121; CHECK-NEXT: nop 122; CHECK-NEXT: nop 123; CHECK-NEXT: nop 124; CHECK-NEXT: nop 125; CHECK-NEXT: nop 126; CHECK-MIPS64: nop 127; CHECK-MIPS64: nop 128; CHECK-MIPS64: nop 129; CHECK-MIPS64: nop 130; CHECK-NEXT: [[TMP]]: 131; CHECK-MIPS32: addiu $25, $25, 52 132} 133; CHECK: .section xray_instr_map,"ao",@progbits,bar 134; CHECK-MIPS64: .8byte .Lxray_sled_2 135; CHECK-MIPS64: .8byte .Lxray_sled_3 136; CHECK-MIPS64: .8byte .Lxray_sled_4 137; CHECK-MIPS32: [[TMP:\$tmp[0-9]+]]: 138; CHECK-MIPS32-NEXT: .4byte ($xray_sled_2)-([[TMP]]) 139; CHECK-MIPS32: [[TMP:\$tmp[0-9]+]]: 140; CHECK-MIPS32-NEXT: .4byte ($xray_sled_3)-([[TMP]]) 141; CHECK-MIPS32: [[TMP:\$tmp[0-9]+]]: 142; CHECK-MIPS32-NEXT: .4byte ($xray_sled_4)-([[TMP]]) 143