From 8727248b7989a81fb73ea187831f55c61a7e2c8d Mon Sep 17 00:00:00 2001 From: Simon Pilgrim Date: Wed, 12 Oct 2022 15:57:45 +0100 Subject: [PATCH] [UpdateTestChecks] Add basic BPF triple handling Working on Issue #57872 - its really useful to be able to autogenerate checks --- llvm/test/CodeGen/BPF/sanity.ll | 106 +++++++++++++++++++++++++++---------- llvm/utils/UpdateTestChecks/asm.py | 20 +++++++ 2 files changed, 97 insertions(+), 29 deletions(-) diff --git a/llvm/test/CodeGen/BPF/sanity.ll b/llvm/test/CodeGen/BPF/sanity.ll index c1171df..3974b42 100644 --- a/llvm/test/CodeGen/BPF/sanity.ll +++ b/llvm/test/CodeGen/BPF/sanity.ll @@ -1,70 +1,109 @@ -; RUN: llc < %s -march=bpfel | FileCheck %s +; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py +; RUN: llc < %s -mtriple=bpfel-- | FileCheck %s @foo_printf.fmt = private unnamed_addr constant [9 x i8] c"hello \0A\00", align 1 ; Function Attrs: nounwind readnone uwtable define i32 @foo_int(i32 %a, i32 %b) #0 { +; CHECK-LABEL: foo_int: +; CHECK: # %bb.0: +; CHECK-NEXT: r0 = r2 +; CHECK-NEXT: r0 += r1 +; CHECK-NEXT: exit %1 = add nsw i32 %b, %a ret i32 %1 -; CHECK-LABEL: foo_int: -; CHECK: r0 += r1 } ; Function Attrs: nounwind readnone uwtable define signext i8 @foo_char(i8 signext %a, i8 signext %b) #0 { +; CHECK-LABEL: foo_char: +; CHECK: # %bb.0: +; CHECK-NEXT: r0 = r2 +; CHECK-NEXT: r0 += r1 +; CHECK-NEXT: r0 <<= 56 +; CHECK-NEXT: r0 s>>= 56 +; CHECK-NEXT: exit %1 = add i8 %b, %a ret i8 %1 -; CHECK-LABEL: foo_char: -; CHECK: r0 += r1 -; CHECK: r0 <<= 56 -; CHECK: r0 s>>= 56 } ; Function Attrs: nounwind readnone uwtable define i64 @foo_ll(i64 %a, i64 %b, i64 %c) #0 { +; CHECK-LABEL: foo_ll: +; CHECK: # %bb.0: +; CHECK-NEXT: r0 = r2 +; CHECK-NEXT: r0 += r1 +; CHECK-NEXT: r0 -= r3 +; CHECK-NEXT: exit %1 = add nsw i64 %b, %a %2 = sub i64 %1, %c ret i64 %2 -; CHECK-LABEL: foo_ll: -; CHECK: r0 = r2 -; CHECK: r0 += r1 -; CHECK: r0 -= r3 } ; Function Attrs: nounwind uwtable define void @foo_call2(i32 %a, i32 %b) #1 { +; CHECK-LABEL: foo_call2: +; CHECK: # %bb.0: +; CHECK-NEXT: r3 = r1 +; CHECK-NEXT: r2 <<= 56 +; CHECK-NEXT: r2 s>>= 56 +; CHECK-NEXT: r1 = r2 +; CHECK-NEXT: r2 = r3 +; CHECK-NEXT: call foo_2arg +; CHECK-NEXT: exit %1 = trunc i32 %b to i8 tail call void @foo_2arg(i8 signext %1, i32 %a) #3 ret void -; CHECK-LABEL: foo_call2: -; CHECK: r2 <<= 56 -; CHECK: r2 s>>= 56 -; CHECK: r1 = r2 } declare void @foo_2arg(i8 signext, i32) #2 ; Function Attrs: nounwind uwtable define i32 @foo_call5(i8 signext %a, i16 signext %b, i32 %c, i64 %d) #1 { +; CHECK-LABEL: foo_call5: +; CHECK: # %bb.0: +; CHECK-NEXT: call bar +; CHECK-NEXT: r0 = 0 +; CHECK-NEXT: exit %1 = tail call i32 @bar(i8 signext %a, i16 signext %b, i32 %c, i64 %d) #3 ret i32 0 -; CHECK-LABEL: foo_call5: -; CHECK: call bar } declare i32 @bar(i8 signext, i16 signext, i32, i64) #2 ; Function Attrs: nounwind readnone uwtable define signext i8 @foo_cmp(i8 signext %a, i8 signext %b) #0 { +; CHECK-LABEL: foo_cmp: +; CHECK: # %bb.0: +; CHECK-NEXT: r0 = r1 +; CHECK-NEXT: if r2 s> r0 goto LBB5_2 +; CHECK-NEXT: # %bb.1: +; CHECK-NEXT: r0 = r2 +; CHECK-NEXT: LBB5_2: +; CHECK-NEXT: exit %1 = icmp slt i8 %a, %b %a.b = select i1 %1, i8 %a, i8 %b ret i8 %a.b -; CHECK-LABEL: foo_cmp: -; CHECK: if r2 s> r0 } ; Function Attrs: nounwind readnone uwtable define i32 @foo_muldiv(i8 signext %a, i16 signext %b, i32 %c, i64 %d) #0 { +; CHECK-LABEL: foo_muldiv: +; CHECK: # %bb.0: +; CHECK-NEXT: r0 = r2 +; CHECK-NEXT: if r1 == 0 goto LBB6_2 +; CHECK-NEXT: # %bb.1: +; CHECK-NEXT: r0 *= r3 +; CHECK-NEXT: goto LBB6_3 +; CHECK-NEXT: LBB6_2: +; CHECK-NEXT: r3 <<= 32 +; CHECK-NEXT: r3 >>= 32 +; CHECK-NEXT: r4 <<= 32 +; CHECK-NEXT: r4 >>= 32 +; CHECK-NEXT: r4 /= r3 +; CHECK-NEXT: r0 = r4 +; CHECK-NEXT: LBB6_3: +; CHECK-NEXT: exit %1 = icmp eq i8 %a, 0 br i1 %1, label %5, label %2 @@ -81,31 +120,40 @@ define i32 @foo_muldiv(i8 signext %a, i16 signext %b, i32 %c, i64 %d) #0 { ;