1; RUN: llc -O2 --mtriple=bpfel \ 2; RUN: -print-after=stack-slot-coloring %s \ 3; RUN: -o /dev/null 2>&1 | FileCheck %s 4 5; Generated from the following C code: 6; 7; #define __bpf_fastcall __attribute__((bpf_fastcall)) 8; 9; void bar1(void) __bpf_fastcall; 10; void buz1(long i, long j, long k); 11; void foo1(long i, long j, long k) { 12; bar1(); 13; buz1(i, j, k); 14; } 15; 16; long bar2(void) __bpf_fastcall; 17; void buz2(long i, long j, long k); 18; void foo2(long i, long j, long k) { 19; bar2(); 20; buz2(i, j, k); 21; } 22; 23; void bar3(long) __bpf_fastcall; 24; void buz3(long i, long j, long k); 25; void foo3(long i, long j, long k) { 26; bar3(i); 27; buz3(i, j, k); 28; } 29; 30; long bar4(long, long) __bpf_fastcall; 31; void buz4(long i, long j, long k); 32; void foo4(long i, long j, long k) { 33; bar4(i, j); 34; buz4(i, j, k); 35; } 36; 37; Using the following command: 38; 39; clang --target=bpf -emit-llvm -O2 -S -o - t.c 40; 41; (unnecessary attrs removed maually) 42 43; Check regmask for calls to functions marked with bpf_fastcall: 44; - void function w/o parameters 45; - non-void function w/o parameters 46; - void function with parameters 47; - non-void function with parameters 48 49declare dso_local void @bar1() #0 50declare dso_local void @buz1(i64 noundef, i64 noundef, i64 noundef) 51define dso_local void @foo1(i64 noundef %i, i64 noundef %j, i64 noundef %k) { 52entry: 53 tail call void @bar1() #1 54 tail call void @buz1(i64 noundef %i, i64 noundef %j, i64 noundef %k) 55 ret void 56} 57 58; CHECK: JAL @bar1, <regmask $r0 $r1 $r2 $r3 $r4 $r5 $r6 $r7 $r8 $r9 $r10 59; CHECK-SAME: $w0 $w1 $w2 $w3 $w4 $w5 $w6 $w7 $w8 $w9 $w10> 60; CHECK-SAME: , implicit $r11, implicit-def $r11 61; CHECK: JAL @buz1, <regmask $r6 $r7 $r8 $r9 $r10 $w6 $w7 $w8 $w9 $w10> 62; CHECK-SAME: , implicit $r11, implicit $r1, implicit $r2, implicit $r3, implicit-def $r11 63 64declare dso_local i64 @bar2() #0 65declare dso_local void @buz2(i64 noundef, i64 noundef, i64 noundef) 66define dso_local void @foo2(i64 noundef %i, i64 noundef %j, i64 noundef %k) { 67entry: 68 tail call i64 @bar2() #1 69 tail call void @buz2(i64 noundef %i, i64 noundef %j, i64 noundef %k) 70 ret void 71} 72 73; CHECK: JAL @bar2, <regmask $r1 $r2 $r3 $r4 $r5 $r6 $r7 $r8 $r9 $r10 74; CHECK-SAME: $w1 $w2 $w3 $w4 $w5 $w6 $w7 $w8 $w9 $w10> 75; CHECK-SAME: , implicit $r11, implicit-def $r11, implicit-def dead $r0 76; CHECK: JAL @buz2, <regmask $r6 $r7 $r8 $r9 $r10 $w6 $w7 $w8 $w9 $w10> 77; CHECK-SAME: , implicit $r11, implicit $r1, implicit $r2, implicit $r3, implicit-def $r11 78 79declare dso_local void @bar3(i64) #0 80declare dso_local void @buz3(i64 noundef, i64 noundef, i64 noundef) 81define dso_local void @foo3(i64 noundef %i, i64 noundef %j, i64 noundef %k) { 82entry: 83 tail call void @bar3(i64 noundef %i) #1 84 tail call void @buz3(i64 noundef %i, i64 noundef %j, i64 noundef %k) 85 ret void 86} 87 88; CHECK: JAL @bar3, <regmask $r0 $r2 $r3 $r4 $r5 $r6 $r7 $r8 $r9 $r10 89; CHECK-SAME: $w0 $w2 $w3 $w4 $w5 $w6 $w7 $w8 $w9 $w10> 90; CHECK-SAME: , implicit $r11, implicit $r1, implicit-def $r11 91; CHECK: JAL @buz3, <regmask $r6 $r7 $r8 $r9 $r10 $w6 $w7 $w8 $w9 $w10> 92; CHECK-SAME: , implicit $r11, implicit $r1, implicit $r2, implicit $r3, implicit-def $r11 93 94declare dso_local i64 @bar4(i64 noundef, i64 noundef) #0 95declare dso_local void @buz4(i64 noundef, i64 noundef, i64 noundef) 96define dso_local void @foo4(i64 noundef %i, i64 noundef %j, i64 noundef %k) { 97entry: 98 tail call i64 @bar4(i64 noundef %i, i64 noundef %j) #1 99 tail call void @buz4(i64 noundef %i, i64 noundef %j, i64 noundef %k) 100 ret void 101} 102 103; CHECK: JAL @bar4, <regmask $r3 $r4 $r5 $r6 $r7 $r8 $r9 $r10 104; CHECK-SAME: $w3 $w4 $w5 $w6 $w7 $w8 $w9 $w10> 105; CHECK-SAME: , implicit $r11, implicit $r1, implicit $r2, implicit-def $r11, implicit-def dead $r0 106; CHECK: JAL @buz4, <regmask $r6 $r7 $r8 $r9 $r10 $w6 $w7 $w8 $w9 $w10> 107; CHECK-SAME: , implicit $r11, implicit $r1, implicit $r2, implicit $r3, implicit-def $r11 108 109attributes #0 = { "bpf_fastcall" } 110attributes #1 = { nounwind "bpf_fastcall" } 111