diff options
Diffstat (limited to 'test/CodeGen/BPF')
40 files changed, 0 insertions, 2326 deletions
diff --git a/test/CodeGen/BPF/alu8.ll b/test/CodeGen/BPF/alu8.ll deleted file mode 100644 index 73e7a8cf77f3..000000000000 --- a/test/CodeGen/BPF/alu8.ll +++ /dev/null @@ -1,45 +0,0 @@ -; RUN: llc -march=bpfel -show-mc-encoding < %s | FileCheck %s - -define i8 @mov(i8 %a, i8 %b) nounwind { -; CHECK-LABEL: mov: -; CHECK: r0 = r2 # encoding: [0xbf,0x20,0x00,0x00,0x00,0x00,0x00,0x00] -; CHECK: exit # encoding: [0x95,0x00,0x00,0x00,0x00,0x00,0x00,0x00] - ret i8 %b -} - -define i8 @add(i8 %a, i8 %b) nounwind { -; CHECK-LABEL: add: -; CHECK: r1 += r2 # encoding: [0x0f,0x21,0x00,0x00,0x00,0x00,0x00,0x00] -; CHECK: r0 = r1 # encoding: [0xbf,0x10,0x00,0x00,0x00,0x00,0x00,0x00] - %1 = add i8 %a, %b - ret i8 %1 -} - -define i8 @and(i8 %a, i8 %b) nounwind { -; CHECK-LABEL: and: -; CHECK: r1 &= r2 # encoding: [0x5f,0x21,0x00,0x00,0x00,0x00,0x00,0x00] - %1 = and i8 %a, %b - ret i8 %1 -} - -define i8 @bis(i8 %a, i8 %b) nounwind { -; CHECK-LABEL: bis: -; CHECK: r1 |= r2 # encoding: [0x4f,0x21,0x00,0x00,0x00,0x00,0x00,0x00] - %1 = or i8 %a, %b - ret i8 %1 -} - -define i8 @xorand(i8 %a, i8 %b) nounwind { -; CHECK-LABEL: xorand: -; CHECK: r2 ^= -1 # encoding: [0xa7,0x02,0x00,0x00,0xff,0xff,0xff,0xff] - %1 = xor i8 %b, -1 - %2 = and i8 %a, %1 - ret i8 %2 -} - -define i8 @xor(i8 %a, i8 %b) nounwind { -; CHECK-LABEL: xor: -; CHECK: r1 ^= r2 # encoding: [0xaf,0x21,0x00,0x00,0x00,0x00,0x00,0x00] - %1 = xor i8 %a, %b - ret i8 %1 -} diff --git a/test/CodeGen/BPF/atomics.ll b/test/CodeGen/BPF/atomics.ll deleted file mode 100644 index 64c45aa4949b..000000000000 --- a/test/CodeGen/BPF/atomics.ll +++ /dev/null @@ -1,19 +0,0 @@ -; RUN: llc < %s -march=bpfel -verify-machineinstrs -show-mc-encoding | FileCheck %s - -; CHECK-LABEL: test_load_add_32 -; CHECK: lock *(u32 *)(r1 + 0) += r2 -; CHECK: encoding: [0xc3,0x21 -define void @test_load_add_32(i32* %p, i32 zeroext %v) { -entry: - atomicrmw add i32* %p, i32 %v seq_cst - ret void -} - -; CHECK-LABEL: test_load_add_64 -; CHECK: lock *(u64 *)(r1 + 0) += r2 -; CHECK: encoding: [0xdb,0x21 -define void @test_load_add_64(i64* %p, i64 zeroext %v) { -entry: - atomicrmw add i64* %p, i64 %v seq_cst - ret void -} diff --git a/test/CodeGen/BPF/basictest.ll b/test/CodeGen/BPF/basictest.ll deleted file mode 100644 index 13a49806ed4f..000000000000 --- a/test/CodeGen/BPF/basictest.ll +++ /dev/null @@ -1,28 +0,0 @@ -; RUN: llc < %s -march=bpfel | FileCheck %s - -define i32 @test0(i32 %X) { - %tmp.1 = add i32 %X, 1 - ret i32 %tmp.1 -; CHECK-LABEL: test0: -; CHECK: r1 += 1 -} - -; CHECK-LABEL: store_imm: -; CHECK: *(u32 *)(r1 + 0) = r{{[03]}} -; CHECK: *(u32 *)(r2 + 4) = r{{[03]}} -define i32 @store_imm(i32* %a, i32* %b) { -entry: - store i32 0, i32* %a, align 4 - %0 = getelementptr inbounds i32, i32* %b, i32 1 - store i32 0, i32* %0, align 4 - ret i32 0 -} - -@G = external global i8 -define zeroext i8 @loadG() { - %tmp = load i8, i8* @G - ret i8 %tmp -; CHECK-LABEL: loadG: -; CHECK: r1 = -; CHECK: r0 = *(u8 *)(r1 + 0) -} diff --git a/test/CodeGen/BPF/byval.ll b/test/CodeGen/BPF/byval.ll deleted file mode 100644 index 25ba909d9cd7..000000000000 --- a/test/CodeGen/BPF/byval.ll +++ /dev/null @@ -1,27 +0,0 @@ -; RUN: not llc -march=bpf < %s 2> %t1 -; RUN: FileCheck %s < %t1 -; CHECK: by value not supported - -%struct.S = type { [10 x i32] } - -; Function Attrs: nounwind uwtable -define void @bar(i32 %a) #0 { -entry: - %.compoundliteral = alloca %struct.S, align 8 - %arrayinit.begin = getelementptr inbounds %struct.S, %struct.S* %.compoundliteral, i64 0, i32 0, i64 0 - store i32 1, i32* %arrayinit.begin, align 8 - %arrayinit.element = getelementptr inbounds %struct.S, %struct.S* %.compoundliteral, i64 0, i32 0, i64 1 - store i32 2, i32* %arrayinit.element, align 4 - %arrayinit.element2 = getelementptr inbounds %struct.S, %struct.S* %.compoundliteral, i64 0, i32 0, i64 2 - store i32 3, i32* %arrayinit.element2, align 8 - %arrayinit.start = getelementptr inbounds %struct.S, %struct.S* %.compoundliteral, i64 0, i32 0, i64 3 - %scevgep4 = bitcast i32* %arrayinit.start to i8* - call void @llvm.memset.p0i8.i64(i8* %scevgep4, i8 0, i64 28, i32 4, i1 false) - call void @foo(i32 %a, %struct.S* byval align 8 %.compoundliteral) #3 - ret void -} - -declare void @foo(i32, %struct.S* byval align 8) #1 - -; Function Attrs: nounwind -declare void @llvm.memset.p0i8.i64(i8* nocapture, i8, i64, i32, i1) #3 diff --git a/test/CodeGen/BPF/cc_args.ll b/test/CodeGen/BPF/cc_args.ll deleted file mode 100644 index a2ac03f0da12..000000000000 --- a/test/CodeGen/BPF/cc_args.ll +++ /dev/null @@ -1,95 +0,0 @@ -; RUN: not llc < %s -march=bpfel -show-mc-encoding | FileCheck %s - -define void @test() #0 { -entry: -; CHECK: test: - -; CHECK: r1 = 123 # encoding: [0xb7,0x01,0x00,0x00,0x7b,0x00,0x00,0x00] -; CHECK: call f_i16 - call void @f_i16(i16 123) - -; CHECK: r1 = 12345678 # encoding: [0xb7,0x01,0x00,0x00,0x4e,0x61,0xbc,0x00] -; CHECK: call f_i32 - call void @f_i32(i32 12345678) - -; CHECK: r1 = 72623859790382856ll # encoding: [0x18,0x01,0x00,0x00,0x08,0x07,0x06,0x05,0x00,0x00,0x00,0x00,0x04,0x03,0x02,0x01] -; CHECK: call f_i64 - call void @f_i64(i64 72623859790382856) - -; CHECK: r1 = 1234 -; CHECK: r2 = 5678 -; CHECK: call f_i32_i32 - call void @f_i32_i32(i32 1234, i32 5678) - -; CHECK: r1 = 2 -; CHECK: r2 = 3 -; CHECK: r3 = 4 -; CHECK: call f_i16_i32_i16 - call void @f_i16_i32_i16(i16 2, i32 3, i16 4) - -; CHECK: r1 = 5 -; CHECK: r2 = 7262385979038285ll -; CHECK: r3 = 6 -; CHECK: call f_i16_i64_i16 - call void @f_i16_i64_i16(i16 5, i64 7262385979038285, i16 6) - - ret void -} - -@g_i16 = common global i16 0, align 2 -@g_i32 = common global i32 0, align 2 -@g_i64 = common global i64 0, align 4 - -define void @f_i16(i16 %a) #0 { -; CHECK: f_i16: -; CHECK: *(u16 *)(r2 + 0) = r1 # encoding: [0x6b,0x12,0x00,0x00,0x00,0x00,0x00,0x00] - store volatile i16 %a, i16* @g_i16, align 2 - ret void -} - -define void @f_i32(i32 %a) #0 { -; CHECK: f_i32: -; CHECK: *(u16 *)(r2 + 0) = r1 # encoding: [0x6b,0x12,0x00,0x00,0x00,0x00,0x00,0x00] -; CHECK: *(u16 *)(r2 + 2) = r1 # encoding: [0x6b,0x12,0x02,0x00,0x00,0x00,0x00,0x00] - store volatile i32 %a, i32* @g_i32, align 2 - ret void -} - -define void @f_i64(i64 %a) #0 { -; CHECK: f_i64: -; CHECK: *(u32 *)(r2 + 0) = r1 -; CHECK: *(u32 *)(r2 + 4) = r1 # encoding: [0x63,0x12,0x04,0x00,0x00,0x00,0x00,0x00] - store volatile i64 %a, i64* @g_i64, align 2 - ret void -} - -define void @f_i32_i32(i32 %a, i32 %b) #0 { -; CHECK: f_i32_i32: -; CHECK: *(u32 *)(r3 + 0) = r1 - store volatile i32 %a, i32* @g_i32, align 4 -; CHECK: *(u32 *)(r3 + 0) = r2 - store volatile i32 %b, i32* @g_i32, align 4 - ret void -} - -define void @f_i16_i32_i16(i16 %a, i32 %b, i16 %c) #0 { -; CHECK: f_i16_i32_i16: -; CHECK: *(u16 *)(r4 + 0) = r1 - store volatile i16 %a, i16* @g_i16, align 2 -; CHECK: *(u32 *)(r1 + 0) = r2 - store volatile i32 %b, i32* @g_i32, align 4 -; CHECK: *(u16 *)(r4 + 0) = r3 - store volatile i16 %c, i16* @g_i16, align 2 - ret void -} - -define void @f_i16_i64_i16(i16 %a, i64 %b, i16 %c) #0 { -; CHECK: f_i16_i64_i16: -; CHECK: *(u16 *)(r4 + 0) = r1 - store volatile i16 %a, i16* @g_i16, align 2 -; CHECK: *(u64 *)(r1 + 0) = r2 # encoding: [0x7b,0x21,0x00,0x00,0x00,0x00,0x00,0x00] - store volatile i64 %b, i64* @g_i64, align 8 -; CHECK: *(u16 *)(r4 + 0) = r3 - store volatile i16 %c, i16* @g_i16, align 2 - ret void -} diff --git a/test/CodeGen/BPF/cc_args_be.ll b/test/CodeGen/BPF/cc_args_be.ll deleted file mode 100644 index dc41ee0d8a7d..000000000000 --- a/test/CodeGen/BPF/cc_args_be.ll +++ /dev/null @@ -1,96 +0,0 @@ -; RUN: not llc < %s -march=bpfeb -show-mc-encoding | FileCheck %s -; test big endian - -define void @test() #0 { -entry: -; CHECK: test: - -; CHECK: r1 = 123 # encoding: [0xb7,0x10,0x00,0x00,0x00,0x00,0x00,0x7b] -; CHECK: call f_i16 - call void @f_i16(i16 123) - -; CHECK: r1 = 12345678 # encoding: [0xb7,0x10,0x00,0x00,0x00,0xbc,0x61,0x4e] -; CHECK: call f_i32 - call void @f_i32(i32 12345678) - -; CHECK: r1 = 72623859790382856ll # encoding: [0x18,0x10,0x00,0x00,0x05,0x06,0x07,0x08,0x00,0x00,0x00,0x00,0x01,0x02,0x03,0x04] -; CHECK: call f_i64 - call void @f_i64(i64 72623859790382856) - -; CHECK: r1 = 1234 -; CHECK: r2 = 5678 -; CHECK: call f_i32_i32 - call void @f_i32_i32(i32 1234, i32 5678) - -; CHECK: r1 = 2 -; CHECK: r2 = 3 -; CHECK: r3 = 4 -; CHECK: call f_i16_i32_i16 - call void @f_i16_i32_i16(i16 2, i32 3, i16 4) - -; CHECK: r1 = 5 -; CHECK: r2 = 7262385979038285ll -; CHECK: r3 = 6 -; CHECK: call f_i16_i64_i16 - call void @f_i16_i64_i16(i16 5, i64 7262385979038285, i16 6) - - ret void -} - -@g_i16 = common global i16 0, align 2 -@g_i32 = common global i32 0, align 2 -@g_i64 = common global i64 0, align 4 - -define void @f_i16(i16 %a) #0 { -; CHECK: f_i16: -; CHECK: *(u16 *)(r2 + 0) = r1 # encoding: [0x6b,0x21,0x00,0x00,0x00,0x00,0x00,0x00] - store volatile i16 %a, i16* @g_i16, align 2 - ret void -} - -define void @f_i32(i32 %a) #0 { -; CHECK: f_i32: -; CHECK: *(u16 *)(r2 + 2) = r1 # encoding: [0x6b,0x21,0x00,0x02,0x00,0x00,0x00,0x00] -; CHECK: *(u16 *)(r2 + 0) = r1 # encoding: [0x6b,0x21,0x00,0x00,0x00,0x00,0x00,0x00] - store volatile i32 %a, i32* @g_i32, align 2 - ret void -} - -define void @f_i64(i64 %a) #0 { -; CHECK: f_i64: -; CHECK: *(u32 *)(r2 + 4) = r1 # encoding: [0x63,0x21,0x00,0x04,0x00,0x00,0x00,0x00] -; CHECK: *(u32 *)(r2 + 0) = r1 - store volatile i64 %a, i64* @g_i64, align 2 - ret void -} - -define void @f_i32_i32(i32 %a, i32 %b) #0 { -; CHECK: f_i32_i32: -; CHECK: *(u32 *)(r3 + 0) = r1 - store volatile i32 %a, i32* @g_i32, align 4 -; CHECK: *(u32 *)(r3 + 0) = r2 - store volatile i32 %b, i32* @g_i32, align 4 - ret void -} - -define void @f_i16_i32_i16(i16 %a, i32 %b, i16 %c) #0 { -; CHECK: f_i16_i32_i16: -; CHECK: *(u16 *)(r4 + 0) = r1 - store volatile i16 %a, i16* @g_i16, align 2 -; CHECK: *(u32 *)(r1 + 0) = r2 - store volatile i32 %b, i32* @g_i32, align 4 -; CHECK: *(u16 *)(r4 + 0) = r3 - store volatile i16 %c, i16* @g_i16, align 2 - ret void -} - -define void @f_i16_i64_i16(i16 %a, i64 %b, i16 %c) #0 { -; CHECK: f_i16_i64_i16: -; CHECK: *(u16 *)(r4 + 0) = r1 - store volatile i16 %a, i16* @g_i16, align 2 -; CHECK: *(u64 *)(r1 + 0) = r2 # encoding: [0x7b,0x12,0x00,0x00,0x00,0x00,0x00,0x00] - store volatile i64 %b, i64* @g_i64, align 8 -; CHECK: *(u16 *)(r4 + 0) = r3 - store volatile i16 %c, i16* @g_i16, align 2 - ret void -} diff --git a/test/CodeGen/BPF/cc_ret.ll b/test/CodeGen/BPF/cc_ret.ll deleted file mode 100644 index eab2a359b8f2..000000000000 --- a/test/CodeGen/BPF/cc_ret.ll +++ /dev/null @@ -1,48 +0,0 @@ -; RUN: not llc < %s -march=bpfel | FileCheck %s - -define void @test() #0 { -entry: -; CHECK: test: - -; CHECK: call f_i16 -; CHECK: *(u16 *)(r1 + 0) = r0 - %0 = call i16 @f_i16() - store volatile i16 %0, i16* @g_i16 - -; CHECK: call f_i32 -; CHECK: *(u32 *)(r1 + 0) = r0 - %1 = call i32 @f_i32() - store volatile i32 %1, i32* @g_i32 - -; CHECK: call f_i64 -; CHECK: *(u64 *)(r1 + 0) = r0 - %2 = call i64 @f_i64() - store volatile i64 %2, i64* @g_i64 - - ret void -} - -@g_i16 = common global i16 0, align 2 -@g_i32 = common global i32 0, align 2 -@g_i64 = common global i64 0, align 2 - -define i16 @f_i16() #0 { -; CHECK: f_i16: -; CHECK: r0 = 1 -; CHECK: exit - ret i16 1 -} - -define i32 @f_i32() #0 { -; CHECK: f_i32: -; CHECK: r0 = 16909060 -; CHECK: exit - ret i32 16909060 -} - -define i64 @f_i64() #0 { -; CHECK: f_i64: -; CHECK: r0 = 72623859790382856ll -; CHECK: exit - ret i64 72623859790382856 -} diff --git a/test/CodeGen/BPF/cmp.ll b/test/CodeGen/BPF/cmp.ll deleted file mode 100644 index 66345ab52a10..000000000000 --- a/test/CodeGen/BPF/cmp.ll +++ /dev/null @@ -1,119 +0,0 @@ -; RUN: llc < %s -march=bpf | FileCheck %s - -; Function Attrs: nounwind readnone uwtable -define signext i8 @foo_cmp1(i8 signext %a, i8 signext %b) #0 { - %1 = icmp sgt i8 %a, %b - br i1 %1, label %2, label %4 - -; <label>:2 ; preds = %0 - %3 = mul i8 %b, %a - br label %6 - -; <label>:4 ; preds = %0 - %5 = shl i8 %b, 3 - br label %6 - -; <label>:6 ; preds = %4, %2 - %.0 = phi i8 [ %3, %2 ], [ %5, %4 ] - ret i8 %.0 -; CHECK-LABEL:foo_cmp1: -; CHECK: if r2 s>= r1 -} - -; Function Attrs: nounwind readnone uwtable -define signext i8 @foo_cmp2(i8 signext %a, i8 signext %b) #0 { - %1 = icmp slt i8 %a, %b - br i1 %1, label %4, label %2 - -; <label>:2 ; preds = %0 - %3 = mul i8 %b, %a - br label %6 - -; <label>:4 ; preds = %0 - %5 = shl i8 %b, 3 - br label %6 - -; <label>:6 ; preds = %4, %2 - %.0 = phi i8 [ %3, %2 ], [ %5, %4 ] - ret i8 %.0 -; CHECK-LABEL:foo_cmp2: -; CHECK: if r2 s> r1 -} - -; Function Attrs: nounwind readnone uwtable -define signext i8 @foo_cmp3(i8 signext %a, i8 signext %b) #0 { - %1 = icmp slt i8 %a, %b - br i1 %1, label %2, label %4 - -; <label>:2 ; preds = %0 - %3 = mul i8 %b, %a - br label %6 - -; <label>:4 ; preds = %0 - %5 = shl i8 %b, 3 - br label %6 - -; <label>:6 ; preds = %4, %2 - %.0 = phi i8 [ %3, %2 ], [ %5, %4 ] - ret i8 %.0 -; CHECK-LABEL:foo_cmp3: -; CHECK: if r1 s>= r2 -} - -; Function Attrs: nounwind readnone uwtable -define signext i8 @foo_cmp4(i8 signext %a, i8 signext %b) #0 { - %1 = icmp sgt i8 %a, %b - br i1 %1, label %4, label %2 - -; <label>:2 ; preds = %0 - %3 = mul i8 %b, %a - br label %6 - -; <label>:4 ; preds = %0 - %5 = shl i8 %b, 3 - br label %6 - -; <label>:6 ; preds = %4, %2 - %.0 = phi i8 [ %3, %2 ], [ %5, %4 ] - ret i8 %.0 -; CHECK-LABEL:foo_cmp4: -; CHECK: if r1 s> r2 -} - -; Function Attrs: nounwind readnone uwtable -define signext i8 @min(i8 signext %a, i8 signext %b) #0 { - %1 = icmp slt i8 %a, %b - %a.b = select i1 %1, i8 %a, i8 %b - ret i8 %a.b -; CHECK-LABEL:min: -; CHECK: if r2 s> r1 -; CHECK: r1 = r2 -; CHECK: r0 = r1 -} - -; Function Attrs: nounwind readnone uwtable -define zeroext i8 @minu(i8 zeroext %a, i8 zeroext %b) #0 { - %1 = icmp ult i8 %a, 100 - %a.b = select i1 %1, i8 %a, i8 %b - ret i8 %a.b -; CHECK-LABEL:minu: -; CHECK: if r3 > r1 -} - -; Function Attrs: nounwind readnone uwtable -define signext i8 @max(i8 signext %a, i8 signext %b) #0 { - %1 = icmp sgt i8 %a, %b - %a.b = select i1 %1, i8 %a, i8 %b - ret i8 %a.b -; CHECK-LABEL:max: -; CHECK: if r1 s> r2 -} - -; Function Attrs: nounwind readnone uwtable -define signext i8 @meq(i8 signext %a, i8 signext %b, i8 signext %c) #0 { - %1 = icmp eq i8 %a, %b - %c.a = select i1 %1, i8 %c, i8 %a - ret i8 %c.a -; CHECK-LABEL:meq: -; CHECK: if r1 == r2 -} diff --git a/test/CodeGen/BPF/dwarfdump.ll b/test/CodeGen/BPF/dwarfdump.ll deleted file mode 100644 index 6a6913011e64..000000000000 --- a/test/CodeGen/BPF/dwarfdump.ll +++ /dev/null @@ -1,64 +0,0 @@ -; RUN: llc -O2 -march=bpfel %s -o %t -filetype=obj -; RUN: llvm-dwarfdump -debug-dump=line %t | FileCheck %s -; RUN: llc -O2 -march=bpfeb %s -o %t -filetype=obj -; RUN: llvm-dwarfdump -debug-dump=line %t | FileCheck %s - -source_filename = "testprog.c" -target datalayout = "e-m:e-p:64:64-i64:64-n32:64-S128" -target triple = "bpf" - -@testprog.myvar_c = internal unnamed_addr global i32 0, align 4, !dbg !0 - -; Function Attrs: nounwind -define i32 @testprog(i32, i32) local_unnamed_addr #0 !dbg !2 { - tail call void @llvm.dbg.value(metadata i32 %0, i64 0, metadata !11, metadata !16), !dbg !17 - tail call void @llvm.dbg.value(metadata i32 %1, i64 0, metadata !12, metadata !16), !dbg !18 - %3 = load i32, i32* @testprog.myvar_c, align 4, !dbg !19, !tbaa !20 - %4 = add i32 %1, %0, !dbg !24 - %5 = add i32 %4, %3, !dbg !25 - store i32 %5, i32* @testprog.myvar_c, align 4, !dbg !26, !tbaa !20 - ret i32 %5, !dbg !27 -} - -; Function Attrs: nounwind readnone -declare void @llvm.dbg.value(metadata, i64, metadata, metadata) #1 - -attributes #0 = { nounwind "correctly-rounded-divide-sqrt-fp-math"="false" "disable-tail-calls"="false" "less-precise-fpmad"="false" "no-frame-pointer-elim"="true" "no-frame-pointer-elim-non-leaf" "no-infs-fp-math"="false" "no-jump-tables"="false" "no-nans-fp-math"="false" "no-signed-zeros-fp-math"="false" "no-trapping-math"="false" "stack-protector-buffer-size"="8" "unsafe-fp-math"="false" "use-soft-float"="false" } -attributes #1 = { nounwind readnone } - -!llvm.dbg.cu = !{!7} -!llvm.module.flags = !{!13, !14} -!llvm.ident = !{!15} - -!0 = distinct !DIGlobalVariableExpression(var: !1) -!1 = !DIGlobalVariable(name: "myvar_c", scope: !2, file: !3, line: 3, type: !6, isLocal: true, isDefinition: true) -!2 = distinct !DISubprogram(name: "testprog", scope: !3, file: !3, line: 1, type: !4, isLocal: false, isDefinition: true, scopeLine: 2, flags: DIFlagPrototyped, isOptimized: true, unit: !7, variables: !10) -!3 = !DIFile(filename: "testprog.c", directory: "/w/llvm/bld") -!4 = !DISubroutineType(types: !5) -!5 = !{!6, !6, !6} -!6 = !DIBasicType(name: "int", size: 32, encoding: DW_ATE_signed) -!7 = distinct !DICompileUnit(language: DW_LANG_C99, file: !3, producer: "clang version 4.0.0 (trunk 287518) (llvm/trunk 287520)", isOptimized: true, runtimeVersion: 0, emissionKind: FullDebug, enums: !8, globals: !9) -!8 = !{} -!9 = !{!0} -!10 = !{!11, !12} -!11 = !DILocalVariable(name: "myvar_a", arg: 1, scope: !2, file: !3, line: 1, type: !6) -!12 = !DILocalVariable(name: "myvar_b", arg: 2, scope: !2, file: !3, line: 1, type: !6) -!13 = !{i32 2, !"Dwarf Version", i32 4} -!14 = !{i32 2, !"Debug Info Version", i32 3} -!15 = !{!"clang version 4.0.0 (trunk 287518) (llvm/trunk 287520)"} -!16 = !DIExpression() -!17 = !DILocation(line: 1, column: 18, scope: !2) -!18 = !DILocation(line: 1, column: 31, scope: !2) -!19 = !DILocation(line: 5, column: 19, scope: !2) -!20 = !{!21, !21, i64 0} -!21 = !{!"int", !22, i64 0} -!22 = !{!"omnipotent char", !23, i64 0} -!23 = !{!"Simple C/C++ TBAA"} -!24 = !DILocation(line: 5, column: 27, scope: !2) -!25 = !DILocation(line: 7, column: 27, scope: !2) -!26 = !DILocation(line: 7, column: 17, scope: !2) -!27 = !DILocation(line: 9, column: 9, scope: !2) - -; CHECK: file_names[ 1] 0 0x00000000 0x00000000 testprog.c -; CHECK: 0x0000000000000000 2 -; CHECK: 0x0000000000000020 7 diff --git a/test/CodeGen/BPF/ex1.ll b/test/CodeGen/BPF/ex1.ll deleted file mode 100644 index 2f77884f5ef0..000000000000 --- a/test/CodeGen/BPF/ex1.ll +++ /dev/null @@ -1,46 +0,0 @@ -; RUN: llc < %s -march=bpfel | FileCheck %s - -%struct.bpf_context = type { i64, i64, i64, i64, i64, i64, i64 } -%struct.sk_buff = type { i64, i64, i64, i64, i64, i64, i64 } -%struct.net_device = type { i64, i64, i64, i64, i64, i64, i64 } - -@bpf_prog1.devname = private unnamed_addr constant [3 x i8] c"lo\00", align 1 -@bpf_prog1.fmt = private unnamed_addr constant [15 x i8] c"skb %x dev %x\0A\00", align 1 - -; Function Attrs: nounwind uwtable -define i32 @bpf_prog1(%struct.bpf_context* nocapture %ctx) #0 section "events/net/netif_receive_skb" { - %devname = alloca [3 x i8], align 1 - %fmt = alloca [15 x i8], align 1 - %1 = getelementptr inbounds [3 x i8], [3 x i8]* %devname, i64 0, i64 0 - call void @llvm.memcpy.p0i8.p0i8.i64(i8* %1, i8* getelementptr inbounds ([3 x i8], [3 x i8]* @bpf_prog1.devname, i64 0, i64 0), i64 3, i32 1, i1 false) - %2 = getelementptr inbounds %struct.bpf_context, %struct.bpf_context* %ctx, i64 0, i32 0 - %3 = load i64, i64* %2, align 8 - %4 = inttoptr i64 %3 to %struct.sk_buff* - %5 = getelementptr inbounds %struct.sk_buff, %struct.sk_buff* %4, i64 0, i32 2 - %6 = bitcast i64* %5 to i8* - %7 = call i8* inttoptr (i64 4 to i8* (i8*)*)(i8* %6) #1 - %8 = call i32 inttoptr (i64 9 to i32 (i8*, i8*, i32)*)(i8* %7, i8* %1, i32 2) #1 - %9 = icmp eq i32 %8, 0 - br i1 %9, label %10, label %13 - -; <label>:10 ; preds = %0 - %11 = getelementptr inbounds [15 x i8], [15 x i8]* %fmt, i64 0, i64 0 - call void @llvm.memcpy.p0i8.p0i8.i64(i8* %11, i8* getelementptr inbounds ([15 x i8], [15 x i8]* @bpf_prog1.fmt, i64 0, i64 0), i64 15, i32 1, i1 false) - %12 = call i32 (i8*, i32, ...) inttoptr (i64 11 to i32 (i8*, i32, ...)*)(i8* %11, i32 15, %struct.sk_buff* %4, i8* %7) #1 -; CHECK-LABEL: bpf_prog1: -; CHECK: call 4 -; CHECK: call 9 -; CHECK: if r0 != 0 -; CHECK: r1 = 622884453 -; CHECK: r1 = 7214898703899978611ll -; CHECK: call 11 -; CHECK: r0 = 0 -; CHECK: exit - br label %13 - -; <label>:13 ; preds = %10, %0 - ret i32 0 -} - -; Function Attrs: nounwind -declare void @llvm.memcpy.p0i8.p0i8.i64(i8* nocapture, i8* nocapture, i64, i32, i1) #1 diff --git a/test/CodeGen/BPF/fi_ri.ll b/test/CodeGen/BPF/fi_ri.ll deleted file mode 100644 index 6ecc82679691..000000000000 --- a/test/CodeGen/BPF/fi_ri.ll +++ /dev/null @@ -1,25 +0,0 @@ -; RUN: not llc < %s -march=bpf | FileCheck %s - -%struct.key_t = type { i32, [16 x i8] } - -; Function Attrs: nounwind uwtable -define i32 @test() #0 { - %key = alloca %struct.key_t, align 4 - %1 = bitcast %struct.key_t* %key to i8* -; CHECK: r1 = 0 -; CHECK: *(u32 *)(r10 - 8) = r1 -; CHECK: *(u64 *)(r10 - 16) = r1 -; CHECK: *(u64 *)(r10 - 24) = r1 - call void @llvm.memset.p0i8.i64(i8* %1, i8 0, i64 20, i32 4, i1 false) -; CHECK: r1 = r10 -; CHECK: r1 += -20 - %2 = getelementptr inbounds %struct.key_t, %struct.key_t* %key, i64 0, i32 1, i64 0 -; CHECK: call test1 - call void @test1(i8* %2) #3 - ret i32 0 -} - -; Function Attrs: nounwind argmemonly -declare void @llvm.memset.p0i8.i64(i8* nocapture, i8, i64, i32, i1) #1 - -declare void @test1(i8*) #2 diff --git a/test/CodeGen/BPF/intrinsics.ll b/test/CodeGen/BPF/intrinsics.ll deleted file mode 100644 index 88aba805adad..000000000000 --- a/test/CodeGen/BPF/intrinsics.ll +++ /dev/null @@ -1,86 +0,0 @@ -; RUN: llc < %s -march=bpfel -show-mc-encoding | FileCheck %s - -; Function Attrs: nounwind uwtable -define i32 @ld_b(i64 %foo, i64* nocapture %bar, i8* %ctx, i8* %ctx2) #0 { - %1 = tail call i64 @llvm.bpf.load.byte(i8* %ctx, i64 123) #2 - %2 = add i64 %1, %foo - %3 = load volatile i64, i64* %bar, align 8 - %4 = add i64 %2, %3 - %5 = tail call i64 @llvm.bpf.load.byte(i8* %ctx2, i64 %foo) #2 - %6 = add i64 %4, %5 - %7 = load volatile i64, i64* %bar, align 8 - %8 = add i64 %6, %7 - %9 = trunc i64 %8 to i32 - ret i32 %9 -; CHECK-LABEL: ld_b: -; CHECK: r0 = *(u8 *)skb[123] -; CHECK: r0 = *(u8 *)skb[r -} - -declare i64 @llvm.bpf.load.byte(i8*, i64) #1 - -; Function Attrs: nounwind uwtable -define i32 @ld_h(i8* %ctx, i8* %ctx2, i32 %foo) #0 { - %1 = tail call i64 @llvm.bpf.load.half(i8* %ctx, i64 123) #2 - %2 = sext i32 %foo to i64 - %3 = tail call i64 @llvm.bpf.load.half(i8* %ctx2, i64 %2) #2 - %4 = add i64 %3, %1 - %5 = trunc i64 %4 to i32 - ret i32 %5 -; CHECK-LABEL: ld_h: -; CHECK: r0 = *(u16 *)skb[r -; CHECK: r0 = *(u16 *)skb[123] -} - -declare i64 @llvm.bpf.load.half(i8*, i64) #1 - -; Function Attrs: nounwind uwtable -define i32 @ld_w(i8* %ctx, i8* %ctx2, i32 %foo) #0 { - %1 = tail call i64 @llvm.bpf.load.word(i8* %ctx, i64 123) #2 - %2 = sext i32 %foo to i64 - %3 = tail call i64 @llvm.bpf.load.word(i8* %ctx2, i64 %2) #2 - %4 = add i64 %3, %1 - %5 = trunc i64 %4 to i32 - ret i32 %5 -; CHECK-LABEL: ld_w: -; CHECK: r0 = *(u32 *)skb[r -; CHECK: r0 = *(u32 *)skb[123] -} - -declare i64 @llvm.bpf.load.word(i8*, i64) #1 - -define i32 @ld_pseudo() #0 { -entry: - %call = tail call i64 @llvm.bpf.pseudo(i64 2, i64 3) - tail call void inttoptr (i64 4 to void (i64, i32)*)(i64 %call, i32 4) #2 - ret i32 0 -; CHECK-LABEL: ld_pseudo: -; CHECK: ld_pseudo r1, 2, 3 # encoding: [0x18,0x21,0x00,0x00,0x03,0x00 -} - -declare i64 @llvm.bpf.pseudo(i64, i64) #2 - -define i32 @bswap(i64 %a, i64 %b, i64 %c) #0 { -entry: - %0 = tail call i64 @llvm.bswap.i64(i64 %a) - %conv = trunc i64 %b to i32 - %1 = tail call i32 @llvm.bswap.i32(i32 %conv) - %conv1 = zext i32 %1 to i64 - %add = add i64 %conv1, %0 - %conv2 = trunc i64 %c to i16 - %2 = tail call i16 @llvm.bswap.i16(i16 %conv2) - %conv3 = zext i16 %2 to i64 - %add4 = add i64 %add, %conv3 - %conv5 = trunc i64 %add4 to i32 - ret i32 %conv5 -; CHECK-LABEL: bswap: -; CHECK: bswap64 r1 # encoding: [0xdc,0x01,0x00,0x00,0x40,0x00,0x00,0x00] -; CHECK: bswap32 r2 # encoding: [0xdc,0x02,0x00,0x00,0x20,0x00,0x00,0x00] -; CHECK: r2 += r1 # encoding: [0x0f,0x12,0x00,0x00,0x00,0x00,0x00,0x00] -; CHECK: bswap16 r3 # encoding: [0xdc,0x03,0x00,0x00,0x10,0x00,0x00,0x00] -; CHECK: r2 += r3 # encoding: [0x0f,0x32,0x00,0x00,0x00,0x00,0x00,0x00] -} - -declare i64 @llvm.bswap.i64(i64) #1 -declare i32 @llvm.bswap.i32(i32) #1 -declare i16 @llvm.bswap.i16(i16) #1 diff --git a/test/CodeGen/BPF/lit.local.cfg b/test/CodeGen/BPF/lit.local.cfg deleted file mode 100644 index a4ab2624af61..000000000000 --- a/test/CodeGen/BPF/lit.local.cfg +++ /dev/null @@ -1,2 +0,0 @@ -if not 'BPF' in config.root.targets: - config.unsupported = True diff --git a/test/CodeGen/BPF/load.ll b/test/CodeGen/BPF/load.ll deleted file mode 100644 index 881917a4c946..000000000000 --- a/test/CodeGen/BPF/load.ll +++ /dev/null @@ -1,43 +0,0 @@ -; RUN: llc < %s -march=bpfel | FileCheck %s - -define i16 @am1(i16* %a) nounwind { - %1 = load i16, i16* %a - ret i16 %1 -} -; CHECK-LABEL: am1: -; CHECK: r0 = *(u16 *)(r1 + 0) - -@foo = external global i16 - -define i16 @am2() nounwind { - %1 = load i16, i16* @foo - ret i16 %1 -} -; CHECK-LABEL: am2: -; CHECK: r0 = *(u16 *)(r1 + 0) - -define i16 @am4() nounwind { - %1 = load volatile i16, i16* inttoptr(i16 32 to i16*) - ret i16 %1 -} -; CHECK-LABEL: am4: -; CHECK: r1 = 32 -; CHECK: r0 = *(u16 *)(r1 + 0) - -define i16 @am5(i16* %a) nounwind { - %1 = getelementptr i16, i16* %a, i16 2 - %2 = load i16, i16* %1 - ret i16 %2 -} -; CHECK-LABEL: am5: -; CHECK: r0 = *(u16 *)(r1 + 4) - -%S = type { i16, i16 } -@baz = common global %S zeroinitializer, align 1 - -define i16 @am6() nounwind { - %1 = load i16, i16* getelementptr (%S, %S* @baz, i32 0, i32 1) - ret i16 %1 -} -; CHECK-LABEL: am6: -; CHECK: r0 = *(u16 *)(r1 + 2) diff --git a/test/CodeGen/BPF/loops.ll b/test/CodeGen/BPF/loops.ll deleted file mode 100644 index 39278fe595c2..000000000000 --- a/test/CodeGen/BPF/loops.ll +++ /dev/null @@ -1,111 +0,0 @@ -; RUN: llc < %s -march=bpfel | FileCheck %s - -define zeroext i16 @add(i16* nocapture %a, i16 zeroext %n) nounwind readonly { -entry: - %cmp8 = icmp eq i16 %n, 0 ; <i1> [#uses=1] - br i1 %cmp8, label %for.end, label %for.body - -for.body: ; preds = %for.body, %entry - %i.010 = phi i16 [ 0, %entry ], [ %inc, %for.body ] ; <i16> [#uses=2] - %sum.09 = phi i16 [ 0, %entry ], [ %add, %for.body ] ; <i16> [#uses=1] - %arrayidx = getelementptr i16, i16* %a, i16 %i.010 ; <i16*> [#uses=1] -; CHECK-LABEL: add: -; CHECK: r{{[0-9]+}} += r{{[0-9]+}} - %tmp4 = load i16, i16* %arrayidx ; <i16> [#uses=1] - %add = add i16 %tmp4, %sum.09 ; <i16> [#uses=2] - %inc = add i16 %i.010, 1 ; <i16> [#uses=2] - %exitcond = icmp eq i16 %inc, %n ; <i1> [#uses=1] - br i1 %exitcond, label %for.end, label %for.body - -for.end: ; preds = %for.body, %entry - %sum.0.lcssa = phi i16 [ 0, %entry ], [ %add, %for.body ] ; <i16> [#uses=1] - ret i16 %sum.0.lcssa -} - -define zeroext i16 @sub(i16* nocapture %a, i16 zeroext %n) nounwind readonly { -entry: - %cmp8 = icmp eq i16 %n, 0 ; <i1> [#uses=1] - br i1 %cmp8, label %for.end, label %for.body - -for.body: ; preds = %for.body, %entry - %i.010 = phi i16 [ 0, %entry ], [ %inc, %for.body ] ; <i16> [#uses=2] - %sum.09 = phi i16 [ 0, %entry ], [ %add, %for.body ] ; <i16> [#uses=1] - %arrayidx = getelementptr i16, i16* %a, i16 %i.010 ; <i16*> [#uses=1] -; CHECK-LABEL: sub: -; CHECK: r{{[0-9]+}} -= r{{[0-9]+}} - %tmp4 = load i16, i16* %arrayidx ; <i16> [#uses=1] - %add = sub i16 %tmp4, %sum.09 ; <i16> [#uses=2] - %inc = add i16 %i.010, 1 ; <i16> [#uses=2] - %exitcond = icmp eq i16 %inc, %n ; <i1> [#uses=1] - br i1 %exitcond, label %for.end, label %for.body - -for.end: ; preds = %for.body, %entry - %sum.0.lcssa = phi i16 [ 0, %entry ], [ %add, %for.body ] ; <i16> [#uses=1] - ret i16 %sum.0.lcssa -} - -define zeroext i16 @or(i16* nocapture %a, i16 zeroext %n) nounwind readonly { -entry: - %cmp8 = icmp eq i16 %n, 0 ; <i1> [#uses=1] - br i1 %cmp8, label %for.end, label %for.body - -for.body: ; preds = %for.body, %entry - %i.010 = phi i16 [ 0, %entry ], [ %inc, %for.body ] ; <i16> [#uses=2] - %sum.09 = phi i16 [ 0, %entry ], [ %add, %for.body ] ; <i16> [#uses=1] - %arrayidx = getelementptr i16, i16* %a, i16 %i.010 ; <i16*> [#uses=1] -; CHECK-LABEL: or: -; CHECK: r{{[0-9]+}} |= r{{[0-9]+}} - %tmp4 = load i16, i16* %arrayidx ; <i16> [#uses=1] - %add = or i16 %tmp4, %sum.09 ; <i16> [#uses=2] - %inc = add i16 %i.010, 1 ; <i16> [#uses=2] - %exitcond = icmp eq i16 %inc, %n ; <i1> [#uses=1] - br i1 %exitcond, label %for.end, label %for.body - -for.end: ; preds = %for.body, %entry - %sum.0.lcssa = phi i16 [ 0, %entry ], [ %add, %for.body ] ; <i16> [#uses=1] - ret i16 %sum.0.lcssa -} - -define zeroext i16 @xor(i16* nocapture %a, i16 zeroext %n) nounwind readonly { -entry: - %cmp8 = icmp eq i16 %n, 0 ; <i1> [#uses=1] - br i1 %cmp8, label %for.end, label %for.body - -for.body: ; preds = %for.body, %entry - %i.010 = phi i16 [ 0, %entry ], [ %inc, %for.body ] ; <i16> [#uses=2] - %sum.09 = phi i16 [ 0, %entry ], [ %add, %for.body ] ; <i16> [#uses=1] - %arrayidx = getelementptr i16, i16* %a, i16 %i.010 ; <i16*> [#uses=1] -; CHECK-LABEL: xor: -; CHECK: r{{[0-9]+}} ^= r{{[0-9]+}} - %tmp4 = load i16, i16* %arrayidx ; <i16> [#uses=1] - %add = xor i16 %tmp4, %sum.09 ; <i16> [#uses=2] - %inc = add i16 %i.010, 1 ; <i16> [#uses=2] - %exitcond = icmp eq i16 %inc, %n ; <i1> [#uses=1] - br i1 %exitcond, label %for.end, label %for.body - -for.end: ; preds = %for.body, %entry - %sum.0.lcssa = phi i16 [ 0, %entry ], [ %add, %for.body ] ; <i16> [#uses=1] - ret i16 %sum.0.lcssa -} - -define zeroext i16 @and(i16* nocapture %a, i16 zeroext %n) nounwind readonly { -entry: - %cmp8 = icmp eq i16 %n, 0 ; <i1> [#uses=1] - br i1 %cmp8, label %for.end, label %for.body - -for.body: ; preds = %for.body, %entry - %i.010 = phi i16 [ 0, %entry ], [ %inc, %for.body ] ; <i16> [#uses=2] - %sum.09 = phi i16 [ 0, %entry ], [ %add, %for.body ] ; <i16> [#uses=1] - %arrayidx = getelementptr i16, i16* %a, i16 %i.010 ; <i16*> [#uses=1] -; CHECK-LABEL: and: -; CHECK: r{{[0-9]+}} &= r{{[0-9]+}} - %tmp4 = load i16, i16* %arrayidx ; <i16> [#uses=1] - %add = and i16 %tmp4, %sum.09 ; <i16> [#uses=2] - %inc = add i16 %i.010, 1 ; <i16> [#uses=2] - %exitcond = icmp eq i16 %inc, %n ; <i1> [#uses=1] - br i1 %exitcond, label %for.end, label %for.body - -for.end: ; preds = %for.body, %entry - %sum.0.lcssa = phi i16 [ 0, %entry ], [ %add, %for.body ] ; <i16> [#uses=1] - ret i16 %sum.0.lcssa -} diff --git a/test/CodeGen/BPF/many_args1.ll b/test/CodeGen/BPF/many_args1.ll deleted file mode 100644 index 08218f452d06..000000000000 --- a/test/CodeGen/BPF/many_args1.ll +++ /dev/null @@ -1,12 +0,0 @@ -; RUN: not llc -march=bpf < %s 2> %t1 -; RUN: FileCheck %s < %t1 -; CHECK: too many args - -; Function Attrs: nounwind uwtable -define i32 @foo(i32 %a, i32 %b, i32 %c) #0 { -entry: - %call = tail call i32 @bar(i32 %a, i32 %b, i32 %c, i32 1, i32 2, i32 3) #3 - ret i32 %call -} - -declare i32 @bar(i32, i32, i32, i32, i32, i32) #1 diff --git a/test/CodeGen/BPF/many_args2.ll b/test/CodeGen/BPF/many_args2.ll deleted file mode 100644 index a69886c2b208..000000000000 --- a/test/CodeGen/BPF/many_args2.ll +++ /dev/null @@ -1,15 +0,0 @@ -; RUN: not llc -march=bpf < %s 2> %t1 -; RUN: FileCheck %s < %t1 -; CHECK: too many args - -; Function Attrs: nounwind readnone uwtable -define i32 @bar(i32 %a, i32 %b, i32 %c, i32 %d, i32 %e, i32 %f) #0 { -entry: - ret i32 1 -} - -; Function Attrs: nounwind readnone uwtable -define i32 @foo(i32 %a, i32 %b, i32 %c) #0 { -entry: - ret i32 1 -} diff --git a/test/CodeGen/BPF/mem_offset.ll b/test/CodeGen/BPF/mem_offset.ll deleted file mode 100644 index 2b86e44ae592..000000000000 --- a/test/CodeGen/BPF/mem_offset.ll +++ /dev/null @@ -1,17 +0,0 @@ -; RUN: llc -march=bpfel -show-mc-encoding < %s | FileCheck %s - -; Function Attrs: nounwind -define i32 @bpf_prog1(i8* nocapture readnone) local_unnamed_addr #0 { -; CHECK: r1 += -1879113726 # encoding: [0x07,0x01,0x00,0x00,0x02,0x00,0xff,0x8f] -; CHECK: r0 = *(u64 *)(r1 + 0) # encoding: [0x79,0x10,0x00,0x00,0x00,0x00,0x00,0x00] - %2 = alloca i64, align 8 - %3 = bitcast i64* %2 to i8* - store volatile i64 590618314553, i64* %2, align 8 - %4 = load volatile i64, i64* %2, align 8 - %5 = add i64 %4, -1879113726 - %6 = inttoptr i64 %5 to i64* - %7 = load i64, i64* %6, align 8 - %8 = trunc i64 %7 to i32 - ret i32 %8 -} - diff --git a/test/CodeGen/BPF/mem_offset_be.ll b/test/CodeGen/BPF/mem_offset_be.ll deleted file mode 100644 index e5e352783d70..000000000000 --- a/test/CodeGen/BPF/mem_offset_be.ll +++ /dev/null @@ -1,18 +0,0 @@ -; RUN: llc -march=bpfeb -show-mc-encoding < %s | FileCheck %s - -; Function Attrs: nounwind -define i32 @bpf_prog1(i8* nocapture readnone) local_unnamed_addr #0 { -; CHECK: r1 = 590618314553ll # encoding: [0x18,0x10,0x00,0x00,0x83,0x98,0x47,0x39,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x89] -; CHECK: r1 += -1879113726 # encoding: [0x07,0x10,0x00,0x00,0x8f,0xff,0x00,0x02] -; CHECK: r0 = *(u64 *)(r1 + 0) # encoding: [0x79,0x01,0x00,0x00,0x00,0x00,0x00,0x00] - %2 = alloca i64, align 8 - %3 = bitcast i64* %2 to i8* - store volatile i64 590618314553, i64* %2, align 8 - %4 = load volatile i64, i64* %2, align 8 - %5 = add i64 %4, -1879113726 - %6 = inttoptr i64 %5 to i64* - %7 = load i64, i64* %6, align 8 - %8 = trunc i64 %7 to i32 - ret i32 %8 -} - diff --git a/test/CodeGen/BPF/objdump_atomics.ll b/test/CodeGen/BPF/objdump_atomics.ll deleted file mode 100644 index fb59449a1479..000000000000 --- a/test/CodeGen/BPF/objdump_atomics.ll +++ /dev/null @@ -1,19 +0,0 @@ -; RUN: llc -march=bpfel -filetype=obj -o - %s | llvm-objdump -d - | FileCheck %s - -; CHECK-LABEL: test_load_add_32 -; CHECK: c3 21 -; CHECK: lock *(u32 *)(r1 + 0) += r2 -define void @test_load_add_32(i32* %p, i32 zeroext %v) { -entry: - atomicrmw add i32* %p, i32 %v seq_cst - ret void -} - -; CHECK-LABEL: test_load_add_64 -; CHECK: db 21 -; CHECK: lock *(u64 *)(r1 + 0) += r2 -define void @test_load_add_64(i64* %p, i64 zeroext %v) { -entry: - atomicrmw add i64* %p, i64 %v seq_cst - ret void -} diff --git a/test/CodeGen/BPF/objdump_intrinsics.ll b/test/CodeGen/BPF/objdump_intrinsics.ll deleted file mode 100644 index 1d33e57de789..000000000000 --- a/test/CodeGen/BPF/objdump_intrinsics.ll +++ /dev/null @@ -1,86 +0,0 @@ -; RUN: llc -march=bpfel -filetype=obj -o - %s | llvm-objdump -d - | FileCheck %s - -; Function Attrs: nounwind uwtable -define i32 @ld_b(i64 %foo, i64* nocapture %bar, i8* %ctx, i8* %ctx2) #0 { - %1 = tail call i64 @llvm.bpf.load.byte(i8* %ctx, i64 123) #2 - %2 = add i64 %1, %foo - %3 = load volatile i64, i64* %bar, align 8 - %4 = add i64 %2, %3 - %5 = tail call i64 @llvm.bpf.load.byte(i8* %ctx2, i64 %foo) #2 - %6 = add i64 %4, %5 - %7 = load volatile i64, i64* %bar, align 8 - %8 = add i64 %6, %7 - %9 = trunc i64 %8 to i32 - ret i32 %9 -; CHECK-LABEL: ld_b: -; CHECK: r0 = *(u8 *)skb[123] -; CHECK: r0 = *(u8 *)skb[r -} - -declare i64 @llvm.bpf.load.byte(i8*, i64) #1 - -; Function Attrs: nounwind uwtable -define i32 @ld_h(i8* %ctx, i8* %ctx2, i32 %foo) #0 { - %1 = tail call i64 @llvm.bpf.load.half(i8* %ctx, i64 123) #2 - %2 = sext i32 %foo to i64 - %3 = tail call i64 @llvm.bpf.load.half(i8* %ctx2, i64 %2) #2 - %4 = add i64 %3, %1 - %5 = trunc i64 %4 to i32 - ret i32 %5 -; CHECK-LABEL: ld_h: -; CHECK: r0 = *(u16 *)skb[r -; CHECK: r0 = *(u16 *)skb[123] -} - -declare i64 @llvm.bpf.load.half(i8*, i64) #1 - -; Function Attrs: nounwind uwtable -define i32 @ld_w(i8* %ctx, i8* %ctx2, i32 %foo) #0 { - %1 = tail call i64 @llvm.bpf.load.word(i8* %ctx, i64 123) #2 - %2 = sext i32 %foo to i64 - %3 = tail call i64 @llvm.bpf.load.word(i8* %ctx2, i64 %2) #2 - %4 = add i64 %3, %1 - %5 = trunc i64 %4 to i32 - ret i32 %5 -; CHECK-LABEL: ld_w: -; CHECK: r0 = *(u32 *)skb[r -; CHECK: r0 = *(u32 *)skb[123] -} - -declare i64 @llvm.bpf.load.word(i8*, i64) #1 - -define i32 @ld_pseudo() #0 { -entry: - %call = tail call i64 @llvm.bpf.pseudo(i64 2, i64 3) - tail call void inttoptr (i64 4 to void (i64, i32)*)(i64 %call, i32 4) #2 - ret i32 0 -; CHECK-LABEL: ld_pseudo: -; CHECK: ld_pseudo r1, 2, 3 -} - -declare i64 @llvm.bpf.pseudo(i64, i64) #2 - -define i32 @bswap(i64 %a, i64 %b, i64 %c) #0 { -entry: - %0 = tail call i64 @llvm.bswap.i64(i64 %a) - %conv = trunc i64 %b to i32 - %1 = tail call i32 @llvm.bswap.i32(i32 %conv) - %conv1 = zext i32 %1 to i64 - %add = add i64 %conv1, %0 - %conv2 = trunc i64 %c to i16 - %2 = tail call i16 @llvm.bswap.i16(i16 %conv2) - %conv3 = zext i16 %2 to i64 - %add4 = add i64 %add, %conv3 - %conv5 = trunc i64 %add4 to i32 - ret i32 %conv5 -; CHECK-LABEL: bswap: -; CHECK: bswap64 r1 -; CHECK: bswap32 r2 -; CHECK: r2 += r1 -; CHECK: bswap16 r3 -; CHECK: r2 += r3 -} - -declare i64 @llvm.bswap.i64(i64) #1 -declare i32 @llvm.bswap.i32(i32) #1 -declare i16 @llvm.bswap.i16(i16) #1 diff --git a/test/CodeGen/BPF/objdump_trivial.ll b/test/CodeGen/BPF/objdump_trivial.ll deleted file mode 100644 index 6b5423854ee7..000000000000 --- a/test/CodeGen/BPF/objdump_trivial.ll +++ /dev/null @@ -1,18 +0,0 @@ -; RUN: llc -march=bpfel -filetype=obj -o - %s | llvm-objdump -d - | FileCheck %s - -; CHECK: if r2 s> r1 goto -; CHECK: call 1 -; CHECK: exit -; CHECK: call 2 -; CHECK: exit - -define void @foo(i32 %a) { -%b = icmp sgt i32 %a, -1 -br i1 %b, label %x, label %y -x: -call void inttoptr (i64 1 to void ()*)() -ret void -y: -call void inttoptr (i64 2 to void ()*)() -ret void -} diff --git a/test/CodeGen/BPF/reloc.ll b/test/CodeGen/BPF/reloc.ll deleted file mode 100644 index 75dbebf311e3..000000000000 --- a/test/CodeGen/BPF/reloc.ll +++ /dev/null @@ -1,43 +0,0 @@ -; RUN: llc -march=bpfel -filetype=obj < %s | llvm-objdump -r - | FileCheck --check-prefix=CHECK-RELOC %s - -%struct.bpf_context = type { i64, i64, i64, i64, i64, i64, i64 } -%struct.sk_buff = type { i64, i64, i64, i64, i64, i64, i64 } -%struct.net_device = type { i64, i64, i64, i64, i64, i64, i64 } - -@bpf_prog1.devname = private unnamed_addr constant [3 x i8] c"lo\00", align 1 -@bpf_prog1.fmt = private unnamed_addr constant [15 x i8] c"skb %x dev %x\0A\00", align 1 - -; Function Attrs: norecurse -define i32 @bpf_prog1(%struct.bpf_context* nocapture %ctx) #0 section "events/net/netif_receive_skb" { - %devname = alloca [3 x i8], align 1 - %fmt = alloca [15 x i8], align 1 - %1 = getelementptr inbounds [3 x i8], [3 x i8]* %devname, i64 0, i64 0 - call void @llvm.memcpy.p0i8.p0i8.i64(i8* %1, i8* getelementptr inbounds ([3 x i8], [3 x i8]* @bpf_prog1.devname, i64 0, i64 0), i64 3, i32 1, i1 false) - %2 = getelementptr inbounds %struct.bpf_context, %struct.bpf_context* %ctx, i64 0, i32 0 - %3 = load i64, i64* %2, align 8 - %4 = inttoptr i64 %3 to %struct.sk_buff* - %5 = getelementptr inbounds %struct.sk_buff, %struct.sk_buff* %4, i64 0, i32 2 - %6 = bitcast i64* %5 to i8* - %7 = call i8* inttoptr (i64 4 to i8* (i8*)*)(i8* %6) #1 - %8 = call i32 inttoptr (i64 9 to i32 (i8*, i8*, i32)*)(i8* %7, i8* %1, i32 2) #1 - %9 = icmp eq i32 %8, 0 - br i1 %9, label %10, label %13 - -; <label>:10 ; preds = %0 - %11 = getelementptr inbounds [15 x i8], [15 x i8]* %fmt, i64 0, i64 0 - call void @llvm.memcpy.p0i8.p0i8.i64(i8* %11, i8* getelementptr inbounds ([15 x i8], [15 x i8]* @bpf_prog1.fmt, i64 0, i64 0), i64 15, i32 1, i1 false) - %12 = call i32 (i8*, i32, ...) inttoptr (i64 11 to i32 (i8*, i32, ...)*)(i8* %11, i32 15, %struct.sk_buff* %4, i8* %7) #1 - br label %13 - -; <label>:13 ; preds = %10, %0 - ret i32 0 - -; CHECK-RELOC: file format ELF64-BPF -; CHECK-RELOC: RELOCATION RECORDS FOR [.rel.eh_frame]: -; CHECK-RELOC: R_BPF_64_64 events/net/netif_receive_skb -} - -; Function Attrs: nounwind -declare void @llvm.memcpy.p0i8.p0i8.i64(i8* nocapture, i8* nocapture, i64, i32, i1) #1 - -attributes #0 = { norecurse } diff --git a/test/CodeGen/BPF/remove_truncate_1.ll b/test/CodeGen/BPF/remove_truncate_1.ll deleted file mode 100644 index 65433853b9d5..000000000000 --- a/test/CodeGen/BPF/remove_truncate_1.ll +++ /dev/null @@ -1,87 +0,0 @@ -; RUN: llc < %s -march=bpf -verify-machineinstrs | FileCheck %s - -; Source code: -; struct xdp_md { -; unsigned data; -; unsigned data_end; -; }; -; -; int gbl; -; int xdp_dummy(struct xdp_md *xdp) -; { -; char tmp; -; long addr; -; -; if (gbl) { -; long addr1 = (long)xdp->data; -; tmp = *(char *)addr1; -; if (tmp == 1) -; return 3; -; } else { -; tmp = *(volatile char *)(long)xdp->data_end; -; if (tmp == 1) -; return 2; -; } -; addr = (long)xdp->data; -; tmp = *(volatile char *)addr; -; if (tmp == 0) -; return 1; -; return 0; -; } - -%struct.xdp_md = type { i32, i32 } - -@gbl = common local_unnamed_addr global i32 0, align 4 - -; Function Attrs: norecurse nounwind -define i32 @xdp_dummy(%struct.xdp_md* nocapture readonly %xdp) local_unnamed_addr #0 { -entry: - %0 = load i32, i32* @gbl, align 4 - %tobool = icmp eq i32 %0, 0 - br i1 %tobool, label %if.else, label %if.then - -if.then: ; preds = %entry - %data = getelementptr inbounds %struct.xdp_md, %struct.xdp_md* %xdp, i64 0, i32 0 - %1 = load i32, i32* %data, align 4 - %conv = zext i32 %1 to i64 - %2 = inttoptr i64 %conv to i8* - %3 = load i8, i8* %2, align 1 - %cmp = icmp eq i8 %3, 1 - br i1 %cmp, label %cleanup20, label %if.end12 -; CHECK: r1 = *(u32 *)(r1 + 0) -; CHECK: r2 = *(u8 *)(r1 + 0) - -if.else: ; preds = %entry - %data_end = getelementptr inbounds %struct.xdp_md, %struct.xdp_md* %xdp, i64 0, i32 1 - %4 = load i32, i32* %data_end, align 4 - %conv6 = zext i32 %4 to i64 -; CHECK: r2 = *(u32 *)(r1 + 4) - %5 = inttoptr i64 %conv6 to i8* - %6 = load volatile i8, i8* %5, align 1 - %cmp8 = icmp eq i8 %6, 1 - br i1 %cmp8, label %cleanup20, label %if.else.if.end12_crit_edge - -if.else.if.end12_crit_edge: ; preds = %if.else - %data13.phi.trans.insert = getelementptr inbounds %struct.xdp_md, %struct.xdp_md* %xdp, i64 0, i32 0 - %.pre = load i32, i32* %data13.phi.trans.insert, align 4 - br label %if.end12 -; CHECK: r1 = *(u32 *)(r1 + 0) - -if.end12: ; preds = %if.else.if.end12_crit_edge, %if.then - %7 = phi i32 [ %.pre, %if.else.if.end12_crit_edge ], [ %1, %if.then ] - %conv14 = zext i32 %7 to i64 -; CHECK-NOT: r1 <<= 32 -; CHECK-NOT: r1 >>= 32 - %8 = inttoptr i64 %conv14 to i8* - %9 = load volatile i8, i8* %8, align 1 -; CHECK: r1 = *(u8 *)(r1 + 0) - %cmp16 = icmp eq i8 %9, 0 - %.28 = zext i1 %cmp16 to i32 - br label %cleanup20 - -cleanup20: ; preds = %if.then, %if.end12, %if.else - %retval.1 = phi i32 [ 3, %if.then ], [ 2, %if.else ], [ %.28, %if.end12 ] - ret i32 %retval.1 -} - -attributes #0 = { norecurse nounwind } diff --git a/test/CodeGen/BPF/remove_truncate_2.ll b/test/CodeGen/BPF/remove_truncate_2.ll deleted file mode 100644 index 979d820dd857..000000000000 --- a/test/CodeGen/BPF/remove_truncate_2.ll +++ /dev/null @@ -1,65 +0,0 @@ -; RUN: llc < %s -march=bpf -verify-machineinstrs | FileCheck %s - -; Source code: -; struct xdp_md { -; unsigned data; -; unsigned data_end; -; }; -; -; int gbl; -; int xdp_dummy(struct xdp_md *xdp) -; { -; char addr = *(char *)(long)xdp->data; -; if (gbl) { -; if (gbl == 1) -; return 1; -; if (addr == 1) -; return 3; -; } else if (addr == 0) -; return 2; -; return 0; -; } - -%struct.xdp_md = type { i32, i32 } - -@gbl = common local_unnamed_addr global i32 0, align 4 - -; Function Attrs: norecurse nounwind readonly -define i32 @xdp_dummy(%struct.xdp_md* nocapture readonly %xdp) local_unnamed_addr #0 { -entry: - %data = getelementptr inbounds %struct.xdp_md, %struct.xdp_md* %xdp, i64 0, i32 0 - %0 = load i32, i32* %data, align 4 - %conv = zext i32 %0 to i64 - %1 = inttoptr i64 %conv to i8* - %2 = load i8, i8* %1, align 1 -; CHECK: r1 = *(u32 *)(r1 + 0) -; CHECK: r1 = *(u8 *)(r1 + 0) - %3 = load i32, i32* @gbl, align 4 - switch i32 %3, label %if.end [ - i32 0, label %if.else - i32 1, label %cleanup - ] - -if.end: ; preds = %entry - %cmp4 = icmp eq i8 %2, 1 -; CHECK: r0 = 3 -; CHECK-NOT: r1 &= 255 -; CHECK: if r1 == 1 goto - br i1 %cmp4, label %cleanup, label %if.end13 - -if.else: ; preds = %entry - %cmp9 = icmp eq i8 %2, 0 -; CHECK: r0 = 2 -; CHECK-NOT: r1 &= 255 -; CHECK: if r1 == 0 goto - br i1 %cmp9, label %cleanup, label %if.end13 - -if.end13: ; preds = %if.else, %if.end - br label %cleanup - -cleanup: ; preds = %if.else, %if.end, %entry, %if.end13 - %retval.0 = phi i32 [ 0, %if.end13 ], [ 1, %entry ], [ 3, %if.end ], [ 2, %if.else ] - ret i32 %retval.0 -} - -attributes #0 = { norecurse nounwind readonly } diff --git a/test/CodeGen/BPF/rodata_1.ll b/test/CodeGen/BPF/rodata_1.ll deleted file mode 100644 index 5566f76bb75c..000000000000 --- a/test/CodeGen/BPF/rodata_1.ll +++ /dev/null @@ -1,52 +0,0 @@ -; RUN: llc < %s -march=bpfel -verify-machineinstrs | FileCheck %s -; RUN: llc < %s -march=bpfeb -verify-machineinstrs | FileCheck %s - -; Source code: -; struct test_t1 { -; char a, b, c; -; }; -; struct test_t2 { -; int a, b, c, d, e; -; }; -; -; struct test_t1 g1; -; struct test_t2 g2; -; int test() -; { -; struct test_t1 t1 = {.c = 1}; -; struct test_t2 t2 = {.c = 1}; -; g1 = t1; -; g2 = t2; -; return 0; -; } - -%struct.test_t1 = type { i8, i8, i8 } -%struct.test_t2 = type { i32, i32, i32, i32, i32 } - -@test.t1 = private unnamed_addr constant %struct.test_t1 { i8 0, i8 0, i8 1 }, align 1 -@test.t2 = private unnamed_addr constant %struct.test_t2 { i32 0, i32 0, i32 1, i32 0, i32 0 }, align 4 -@g1 = common local_unnamed_addr global %struct.test_t1 zeroinitializer, align 1 -@g2 = common local_unnamed_addr global %struct.test_t2 zeroinitializer, align 4 - -; Function Attrs: nounwind -define i32 @test() local_unnamed_addr #0 { -; CHECK-LABEL: test: - -entry: - tail call void @llvm.memcpy.p0i8.p0i8.i64(i8* getelementptr inbounds (%struct.test_t1, %struct.test_t1* @g1, i64 0, i32 0), i8* getelementptr inbounds (%struct.test_t1, %struct.test_t1* @test.t1, i64 0, i32 0), i64 3, i32 1, i1 false) - tail call void @llvm.memcpy.p0i8.p0i8.i64(i8* bitcast (%struct.test_t2* @g2 to i8*), i8* bitcast (%struct.test_t2* @test.t2 to i8*), i64 20, i32 4, i1 false) -; CHECK: r1 = <MCOperand Expr:(g1)>ll -; CHECK: r2 = 0 -; CHECK: *(u8 *)(r1 + 1) = r2 -; CHECK: r3 = 1 -; CHECK: *(u8 *)(r1 + 2) = r3 -; CHECK: r1 = <MCOperand Expr:(g2)>ll -; CHECK: *(u32 *)(r1 + 8) = r3 - ret i32 0 -} -; CHECK: .section .rodata,"a",@progbits - -declare void @llvm.memcpy.p0i8.p0i8.i64(i8* nocapture writeonly, i8* nocapture readonly, i64, i32, i1) #1 - -attributes #0 = { nounwind } -attributes #1 = { argmemonly nounwind } diff --git a/test/CodeGen/BPF/rodata_2.ll b/test/CodeGen/BPF/rodata_2.ll deleted file mode 100644 index 74b3c3640c3f..000000000000 --- a/test/CodeGen/BPF/rodata_2.ll +++ /dev/null @@ -1,51 +0,0 @@ -; RUN: llc < %s -march=bpfel -verify-machineinstrs | FileCheck %s -; RUN: llc < %s -march=bpfeb -verify-machineinstrs | FileCheck %s - -; Source code: -; struct test_t1 { -; char a; -; int b; -; }; -; struct test_t2 { -; char a, b; -; struct test_t1 c[2]; -; int d[2]; -; int e; -; }; -; struct test_t2 g; -; int test() -; { -; struct test_t2 t2 = {.c = {{}, {.b = 1}}, .d = {2, 3}}; -; g = t2; -; return 0; -; } - -%struct.test_t2 = type { i8, i8, [2 x %struct.test_t1], [2 x i32], i32 } -%struct.test_t1 = type { i8, i32 } - -@test.t2 = private unnamed_addr constant %struct.test_t2 { i8 0, i8 0, [2 x %struct.test_t1] [%struct.test_t1 zeroinitializer, %struct.test_t1 { i8 0, i32 1 }], [2 x i32] [i32 2, i32 3], i32 0 }, align 4 -@g = common local_unnamed_addr global %struct.test_t2 zeroinitializer, align 4 - -; Function Attrs: nounwind -define i32 @test() local_unnamed_addr #0 { -; CHECK-LABEL: test: - -entry: - tail call void @llvm.memcpy.p0i8.p0i8.i64(i8* getelementptr inbounds (%struct.test_t2, %struct.test_t2* @g, i64 0, i32 0), i8* getelementptr inbounds (%struct.test_t2, %struct.test_t2* @test.t2, i64 0, i32 0), i64 32, i32 4, i1 false) -; CHECK: r1 = <MCOperand Expr:(g)>ll -; CHECK: r2 = 0 -; CHECK: *(u32 *)(r1 + 28) = r2 -; CHECK: r3 = 3 -; CHECK: *(u32 *)(r1 + 24) = r3 -; CHECK: r3 = 2 -; CHECK: *(u32 *)(r1 + 20) = r3 -; CHECK: r3 = 1 -; CHECK: *(u32 *)(r1 + 16) = r3 - ret i32 0 -} -; CHECK: .section .rodata.cst32,"aM",@progbits,32 - -declare void @llvm.memcpy.p0i8.p0i8.i64(i8* nocapture writeonly, i8* nocapture readonly, i64, i32, i1) #1 - -attributes #0 = { nounwind } -attributes #1 = { argmemonly nounwind } diff --git a/test/CodeGen/BPF/rodata_3.ll b/test/CodeGen/BPF/rodata_3.ll deleted file mode 100644 index 814ce7645465..000000000000 --- a/test/CodeGen/BPF/rodata_3.ll +++ /dev/null @@ -1,41 +0,0 @@ -; REQUIRES: x86_64-linux -; RUN: llc < %s -march=bpfel -verify-machineinstrs | FileCheck --check-prefix=CHECK-EL %s -; RUN: llc < %s -march=bpfeb -verify-machineinstrs | FileCheck --check-prefix=CHECK-EB %s -; -; This test requires little-endian host, so we specific x86_64-linux here. -; Source code: -; struct test_t1 { -; char a; -; int b, c, d; -; }; -; -; struct test_t1 g; -; int test() -; { -; struct test_t1 t1 = {.a = 1}; -; g = t1; -; return 0; -; } - -%struct.test_t1 = type { i8, i32, i32, i32 } - -@test.t1 = private unnamed_addr constant %struct.test_t1 { i8 1, i32 0, i32 0, i32 0 }, align 4 -@g = common local_unnamed_addr global %struct.test_t1 zeroinitializer, align 4 - -; Function Attrs: nounwind -define i32 @test() local_unnamed_addr #0 { -entry: - tail call void @llvm.memcpy.p0i8.p0i8.i64(i8* getelementptr inbounds (%struct.test_t1, %struct.test_t1* @g, i64 0, i32 0), i8* getelementptr inbounds (%struct.test_t1, %struct.test_t1* @test.t1, i64 0, i32 0), i64 16, i32 4, i1 false) -; CHECK-EL: r2 = 1 -; CHECK-EL: *(u32 *)(r1 + 0) = r2 -; CHECK-EB: r2 = 16777216 -; CHECK-EB: *(u32 *)(r1 + 0) = r2 - ret i32 0 -} -; CHECK-EL: .section .rodata.cst16,"aM",@progbits,16 -; CHECK-EB: .section .rodata.cst16,"aM",@progbits,16 - -declare void @llvm.memcpy.p0i8.p0i8.i64(i8* nocapture writeonly, i8* nocapture readonly, i64, i32, i1) #1 - -attributes #0 = { nounwind } -attributes #1 = { argmemonly nounwind } diff --git a/test/CodeGen/BPF/rodata_4.ll b/test/CodeGen/BPF/rodata_4.ll deleted file mode 100644 index d6b9fba5be0a..000000000000 --- a/test/CodeGen/BPF/rodata_4.ll +++ /dev/null @@ -1,43 +0,0 @@ -; RUN: llc < %s -march=bpfel -verify-machineinstrs | FileCheck %s -; RUN: llc < %s -march=bpfeb -verify-machineinstrs | FileCheck %s - -; Source code: -; struct test_t1 -; { -; short a; -; short b; -; char c; -; }; -; -; struct test_t1 g; -; int test() -; { -; struct test_t1 t1[] = {{50, 500, 5}, {60, 600, 6}, {70, 700, 7}, {80, 800, 8} }; -; -; g = t1[1]; -; return 0; -; } - -%struct.test_t1 = type { i16, i16, i8 } - -@test.t1 = private unnamed_addr constant [4 x %struct.test_t1] [%struct.test_t1 { i16 50, i16 500, i8 5 }, %struct.test_t1 { i16 60, i16 600, i8 6 }, %struct.test_t1 { i16 70, i16 700, i8 7 }, %struct.test_t1 { i16 80, i16 800, i8 8 }], align 2 -@g = common local_unnamed_addr global %struct.test_t1 zeroinitializer, align 2 - -; Function Attrs: nounwind -define i32 @test() local_unnamed_addr #0 { -; CHECK-LABEL: test: -entry: - tail call void @llvm.memcpy.p0i8.p0i8.i64(i8* bitcast (%struct.test_t1* @g to i8*), i8* bitcast (%struct.test_t1* getelementptr inbounds ([4 x %struct.test_t1], [4 x %struct.test_t1]* @test.t1, i64 0, i64 1) to i8*), i64 6, i32 2, i1 false) -; CHECK: r2 = 600 -; CHECK: *(u16 *)(r1 + 2) = r2 -; CHECK: r2 = 60 -; CHECK: *(u16 *)(r1 + 0) = r2 - ret i32 0 -} -; CHECK .section .rodata,"a",@progbits - -; Function Attrs: argmemonly nounwind -declare void @llvm.memcpy.p0i8.p0i8.i64(i8* nocapture writeonly, i8* nocapture readonly, i64, i32, i1) #1 - -attributes #0 = { nounwind } -attributes #1 = { argmemonly nounwind } diff --git a/test/CodeGen/BPF/sanity.ll b/test/CodeGen/BPF/sanity.ll deleted file mode 100644 index a7aed65b821e..000000000000 --- a/test/CodeGen/BPF/sanity.ll +++ /dev/null @@ -1,117 +0,0 @@ -; RUN: not llc < %s -march=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 { - %1 = add nsw i32 %b, %a - ret i32 %1 -; CHECK-LABEL: foo_int: -; CHECK: r2 += r1 -} - -; Function Attrs: nounwind readnone uwtable -define signext i8 @foo_char(i8 signext %a, i8 signext %b) #0 { - %1 = add i8 %b, %a - ret i8 %1 -; CHECK-LABEL: foo_char: -; CHECK: r2 += r1 -; CHECK: r2 <<= 56 -; CHECK: r2 s>>= 56 -} - -; Function Attrs: nounwind readnone uwtable -define i64 @foo_ll(i64 %a, i64 %b, i64 %c) #0 { - %1 = add nsw i64 %b, %a - %2 = sub i64 %1, %c - ret i64 %2 -; CHECK-LABEL: foo_ll: -; CHECK: r2 += r1 -; CHECK: r2 -= r3 -; CHECK: r0 = r2 -} - -; Function Attrs: nounwind uwtable -define void @foo_call2(i32 %a, i32 %b) #1 { - %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 { - %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 { - %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> r1 -} - -; Function Attrs: nounwind readnone uwtable -define i32 @foo_muldiv(i8 signext %a, i16 signext %b, i32 %c, i64 %d) #0 { - %1 = icmp eq i8 %a, 0 - br i1 %1, label %5, label %2 - -; <label>:2 ; preds = %0 - %3 = sext i16 %b to i32 - %4 = mul nsw i32 %3, %c - br label %8 - -; <label>:5 ; preds = %0 - %6 = trunc i64 %d to i32 - %7 = udiv i32 %6, %c - br label %8 - -; <label>:8 ; preds = %5, %2 - %.0 = phi i32 [ %4, %2 ], [ %7, %5 ] - ret i32 %.0 -; CHECK-LABEL: foo_muldiv: -; CHECK: r2 *= r3 -} - -; Function Attrs: nounwind uwtable -define i32 @foo_optimized() #1 { - %1 = tail call i32 @manyarg(i32 1, i32 2, i32 3, i32 4, i32 5) #3 - ret i32 %1 -; CHECK-LABEL: foo_optimized: -; CHECK: r1 = 1 -; CHECK: r2 = 2 -; CHECK: r3 = 3 -; CHECK: r4 = 4 -; CHECK: r5 = 5 -} - -declare i32 @manyarg(i32, i32, i32, i32, i32) #2 - -; Function Attrs: nounwind uwtable -define void @foo_printf() #1 { - %fmt = alloca [9 x i8], align 1 - %1 = getelementptr inbounds [9 x i8], [9 x i8]* %fmt, i64 0, i64 0 - call void @llvm.memcpy.p0i8.p0i8.i64(i8* %1, i8* getelementptr inbounds ([9 x i8], [9 x i8]* @foo_printf.fmt, i64 0, i64 0), i64 9, i32 1, i1 false) -; CHECK-LABEL: foo_printf: -; CHECK: r1 = 729618802566522216ll - %2 = call i32 (i8*, ...) @printf(i8* %1) #3 - ret void -} - -; Function Attrs: nounwind -declare void @llvm.memcpy.p0i8.p0i8.i64(i8* nocapture, i8* nocapture, i64, i32, i1) #3 - -; Function Attrs: nounwind -declare i32 @printf(i8* nocapture, ...) #4 diff --git a/test/CodeGen/BPF/sdiv_error.ll b/test/CodeGen/BPF/sdiv_error.ll deleted file mode 100644 index 053b82dd98fa..000000000000 --- a/test/CodeGen/BPF/sdiv_error.ll +++ /dev/null @@ -1,9 +0,0 @@ -; RUN: not llc -march=bpf < %s 2> %t1 -; RUN: FileCheck %s < %t1 -; CHECK: Unsupport signed division - -; Function Attrs: norecurse nounwind readnone -define i32 @test(i32 %len) #0 { - %1 = srem i32 %len, 15 - ret i32 %1 -} diff --git a/test/CodeGen/BPF/setcc.ll b/test/CodeGen/BPF/setcc.ll deleted file mode 100644 index 294c49365670..000000000000 --- a/test/CodeGen/BPF/setcc.ll +++ /dev/null @@ -1,99 +0,0 @@ -; RUN: llc -march=bpfel < %s | FileCheck %s - -define i16 @sccweqand(i16 %a, i16 %b) nounwind { - %t1 = and i16 %a, %b - %t2 = icmp eq i16 %t1, 0 - %t3 = zext i1 %t2 to i16 - ret i16 %t3 -} -; CHECK-LABEL: sccweqand: -; CHECK: if r1 == r2 - -define i16 @sccwneand(i16 %a, i16 %b) nounwind { - %t1 = and i16 %a, %b - %t2 = icmp ne i16 %t1, 0 - %t3 = zext i1 %t2 to i16 - ret i16 %t3 -} -; CHECK-LABEL: sccwneand: -; CHECK: if r1 != r2 - -define i16 @sccwne(i16 %a, i16 %b) nounwind { - %t1 = icmp ne i16 %a, %b - %t2 = zext i1 %t1 to i16 - ret i16 %t2 -} -; CHECK-LABEL:sccwne: -; CHECK: if r1 != r2 - -define i16 @sccweq(i16 %a, i16 %b) nounwind { - %t1 = icmp eq i16 %a, %b - %t2 = zext i1 %t1 to i16 - ret i16 %t2 -} -; CHECK-LABEL:sccweq: -; CHECK: if r1 == r2 - -define i16 @sccwugt(i16 %a, i16 %b) nounwind { - %t1 = icmp ugt i16 %a, %b - %t2 = zext i1 %t1 to i16 - ret i16 %t2 -} -; CHECK-LABEL:sccwugt: -; CHECK: if r1 > r2 - -define i16 @sccwuge(i16 %a, i16 %b) nounwind { - %t1 = icmp uge i16 %a, %b - %t2 = zext i1 %t1 to i16 - ret i16 %t2 -} -; CHECK-LABEL:sccwuge: -; CHECK: if r1 >= r2 - -define i16 @sccwult(i16 %a, i16 %b) nounwind { - %t1 = icmp ult i16 %a, %b - %t2 = zext i1 %t1 to i16 - ret i16 %t2 -} -; CHECK-LABEL:sccwult: -; CHECK: if r2 > r1 - -define i16 @sccwule(i16 %a, i16 %b) nounwind { - %t1 = icmp ule i16 %a, %b - %t2 = zext i1 %t1 to i16 - ret i16 %t2 -} -; CHECK-LABEL:sccwule: -; CHECK: if r2 >= r1 - -define i16 @sccwsgt(i16 %a, i16 %b) nounwind { - %t1 = icmp sgt i16 %a, %b - %t2 = zext i1 %t1 to i16 - ret i16 %t2 -} -; CHECK-LABEL:sccwsgt: -; CHECK: if r1 s> r2 - -define i16 @sccwsge(i16 %a, i16 %b) nounwind { - %t1 = icmp sge i16 %a, %b - %t2 = zext i1 %t1 to i16 - ret i16 %t2 -} -; CHECK-LABEL:sccwsge: -; CHECK: if r1 s>= r2 - -define i16 @sccwslt(i16 %a, i16 %b) nounwind { - %t1 = icmp slt i16 %a, %b - %t2 = zext i1 %t1 to i16 - ret i16 %t2 -} -; CHECK-LABEL:sccwslt: -; CHECK: if r2 s> r1 - -define i16 @sccwsle(i16 %a, i16 %b) nounwind { - %t1 = icmp sle i16 %a, %b - %t2 = zext i1 %t1 to i16 - ret i16 %t2 -} -; CHECK-LABEL:sccwsle: -; CHECK: if r2 s>= r1 diff --git a/test/CodeGen/BPF/shifts.ll b/test/CodeGen/BPF/shifts.ll deleted file mode 100644 index 15e228c492db..000000000000 --- a/test/CodeGen/BPF/shifts.ll +++ /dev/null @@ -1,100 +0,0 @@ -; RUN: llc < %s -march=bpfel -show-mc-encoding | FileCheck %s - -define zeroext i8 @lshr8(i8 zeroext %a, i8 zeroext %cnt) nounwind readnone { -entry: -; CHECK-LABEL: lshr8: -; CHECK: r1 >>= r2 # encoding: [0x7f,0x21,0x00,0x00,0x00,0x00,0x00,0x00] - %shr = lshr i8 %a, %cnt - ret i8 %shr -} - -define signext i8 @ashr8(i8 signext %a, i8 zeroext %cnt) nounwind readnone { -entry: -; CHECK-LABEL: ashr8: -; CHECK: r1 s>>= r2 # encoding: [0xcf,0x21,0x00,0x00,0x00,0x00,0x00,0x00] - %shr = ashr i8 %a, %cnt - ret i8 %shr -} - -define zeroext i8 @shl8(i8 zeroext %a, i8 zeroext %cnt) nounwind readnone { -entry: -; CHECK: shl8 -; CHECK: r1 <<= r2 # encoding: [0x6f,0x21,0x00,0x00,0x00,0x00,0x00,0x00] - %shl = shl i8 %a, %cnt - ret i8 %shl -} - -define zeroext i16 @lshr16(i16 zeroext %a, i16 zeroext %cnt) nounwind readnone { -entry: -; CHECK-LABEL: lshr16: -; CHECK: r1 >>= r2 # encoding: [0x7f,0x21,0x00,0x00,0x00,0x00,0x00,0x00] - %shr = lshr i16 %a, %cnt - ret i16 %shr -} - -define signext i16 @ashr16(i16 signext %a, i16 zeroext %cnt) nounwind readnone { -entry: -; CHECK-LABEL: ashr16: -; CHECK: r1 s>>= r2 # encoding: [0xcf,0x21,0x00,0x00,0x00,0x00,0x00,0x00] - %shr = ashr i16 %a, %cnt - ret i16 %shr -} - -define zeroext i16 @shl16(i16 zeroext %a, i16 zeroext %cnt) nounwind readnone { -entry: -; CHECK-LABEL: shl16: -; CHECK: r1 <<= r2 # encoding: [0x6f,0x21,0x00,0x00,0x00,0x00,0x00,0x00] - %shl = shl i16 %a, %cnt - ret i16 %shl -} - -define zeroext i32 @lshr32(i32 zeroext %a, i32 zeroext %cnt) nounwind readnone { -entry: -; CHECK-LABEL: lshr32: -; CHECK: r1 >>= r2 # encoding: [0x7f,0x21,0x00,0x00,0x00,0x00,0x00,0x00] -; CHECK: r1 <<= 32 # encoding: [0x67,0x01,0x00,0x00,0x20,0x00,0x00,0x00] - %shr = lshr i32 %a, %cnt - ret i32 %shr -} - -define signext i32 @ashr32(i32 signext %a, i32 zeroext %cnt) nounwind readnone { -entry: -; CHECK-LABEL: ashr32: -; CHECK: r1 s>>= r2 # encoding: [0xcf,0x21,0x00,0x00,0x00,0x00,0x00,0x00] - %shr = ashr i32 %a, %cnt - ret i32 %shr -} - -define zeroext i32 @shl32(i32 zeroext %a, i32 zeroext %cnt) nounwind readnone { -entry: -; CHECK-LABEL: shl32: -; CHECK: r1 <<= r2 # encoding: [0x6f,0x21,0x00,0x00,0x00,0x00,0x00,0x00] - %shl = shl i32 %a, %cnt - ret i32 %shl -} - -define zeroext i64 @lshr64(i64 zeroext %a, i64 zeroext %cnt) nounwind readnone { -entry: -; CHECK-LABEL: lshr64: -; CHECK: r1 >>= r2 # encoding: [0x7f,0x21,0x00,0x00,0x00,0x00,0x00,0x00] - %shr = lshr i64 %a, %cnt - ret i64 %shr -} - -define signext i64 @ashr64(i64 signext %a, i64 zeroext %cnt) nounwind readnone { -entry: -; CHECK-LABEL: ashr64: -; CHECK: r1 s>>= r2 # encoding: [0xcf,0x21,0x00,0x00,0x00,0x00,0x00,0x00] - %shr = ashr i64 %a, %cnt - ret i64 %shr -} - -define zeroext i64 @shl64(i64 zeroext %a, i64 zeroext %cnt) nounwind readnone { -entry: -; CHECK-LABEL: shl64: -; CHECK: r1 <<= r2 # encoding: [0x6f,0x21,0x00,0x00,0x00,0x00,0x00,0x00] -; CHECK: r0 = r1 # encoding: [0xbf,0x10,0x00,0x00,0x00,0x00,0x00,0x00] -; CHECK: exit # encoding: [0x95,0x00,0x00,0x00,0x00,0x00,0x00,0x00] - %shl = shl i64 %a, %cnt - ret i64 %shl -} diff --git a/test/CodeGen/BPF/sockex2.ll b/test/CodeGen/BPF/sockex2.ll deleted file mode 100644 index d5f070ea605c..000000000000 --- a/test/CodeGen/BPF/sockex2.ll +++ /dev/null @@ -1,324 +0,0 @@ -; RUN: llc < %s -march=bpfel -show-mc-encoding | FileCheck %s - -%struct.bpf_map_def = type { i32, i32, i32, i32 } -%struct.sk_buff = type opaque - -@hash_map = global %struct.bpf_map_def { i32 1, i32 4, i32 8, i32 1024 }, section "maps", align 4 - -; Function Attrs: nounwind uwtable -define i32 @bpf_prog2(%struct.sk_buff* %skb) #0 section "socket2" { - %key = alloca i32, align 4 - %val = alloca i64, align 8 - %1 = bitcast %struct.sk_buff* %skb to i8* - %2 = call i64 @llvm.bpf.load.half(i8* %1, i64 12) #2 - %3 = icmp eq i64 %2, 34984 - br i1 %3, label %4, label %6 - -; <label>:4 ; preds = %0 - %5 = call i64 @llvm.bpf.load.half(i8* %1, i64 16) #2 - br label %6 - -; <label>:6 ; preds = %4, %0 - %proto.0.i = phi i64 [ %5, %4 ], [ %2, %0 ] - %nhoff.0.i = phi i64 [ 18, %4 ], [ 14, %0 ] - %7 = icmp eq i64 %proto.0.i, 33024 - br i1 %7, label %8, label %12 - -; <label>:8 ; preds = %6 - %9 = add i64 %nhoff.0.i, 2 - %10 = call i64 @llvm.bpf.load.half(i8* %1, i64 %9) #2 - %11 = add i64 %nhoff.0.i, 4 - br label %12 - -; <label>:12 ; preds = %8, %6 - %proto.1.i = phi i64 [ %10, %8 ], [ %proto.0.i, %6 ] - %nhoff.1.i = phi i64 [ %11, %8 ], [ %nhoff.0.i, %6 ] - switch i64 %proto.1.i, label %flow_dissector.exit.thread [ - i64 2048, label %13 - i64 34525, label %39 - ] - -; <label>:13 ; preds = %12 - %14 = add i64 %nhoff.1.i, 6 - %15 = call i64 @llvm.bpf.load.half(i8* %1, i64 %14) #2 - %16 = and i64 %15, 16383 - %17 = icmp eq i64 %16, 0 - br i1 %17, label %18, label %.thread.i.i - -; <label>:18 ; preds = %13 - %19 = add i64 %nhoff.1.i, 9 - %20 = call i64 @llvm.bpf.load.byte(i8* %1, i64 %19) #2 - %21 = icmp eq i64 %20, 47 - br i1 %21, label %28, label %.thread.i.i - -.thread.i.i: ; preds = %18, %13 - %22 = phi i64 [ %20, %18 ], [ 0, %13 ] - %23 = add i64 %nhoff.1.i, 12 - %24 = call i64 @llvm.bpf.load.word(i8* %1, i64 %23) #2 - %25 = add i64 %nhoff.1.i, 16 - %26 = call i64 @llvm.bpf.load.word(i8* %1, i64 %25) #2 - %27 = trunc i64 %26 to i32 - br label %28 - -; <label>:28 ; preds = %.thread.i.i, %18 - %29 = phi i32 [ %27, %.thread.i.i ], [ undef, %18 ] - %30 = phi i64 [ %22, %.thread.i.i ], [ 47, %18 ] - %31 = call i64 @llvm.bpf.load.byte(i8* %1, i64 %nhoff.1.i) #2 - %32 = icmp eq i64 %31, 69 - br i1 %32, label %33, label %35 - -; <label>:33 ; preds = %28 - %34 = add i64 %nhoff.1.i, 20 - br label %parse_ip.exit.i - -; <label>:35 ; preds = %28 - %36 = shl i64 %31, 2 - %37 = and i64 %36, 60 - %38 = add i64 %37, %nhoff.1.i - br label %parse_ip.exit.i - -; <label>:39 ; preds = %12 - %40 = add i64 %nhoff.1.i, 6 - %41 = call i64 @llvm.bpf.load.byte(i8* %1, i64 %40) #2 - %42 = add i64 %nhoff.1.i, 8 - %43 = call i64 @llvm.bpf.load.word(i8* %1, i64 %42) #2 - %44 = add i64 %nhoff.1.i, 12 - %45 = call i64 @llvm.bpf.load.word(i8* %1, i64 %44) #2 - %46 = add i64 %nhoff.1.i, 16 - %47 = call i64 @llvm.bpf.load.word(i8* %1, i64 %46) #2 - %48 = add i64 %nhoff.1.i, 20 - %49 = call i64 @llvm.bpf.load.word(i8* %1, i64 %48) #2 - %50 = add i64 %nhoff.1.i, 24 - %51 = call i64 @llvm.bpf.load.word(i8* %1, i64 %50) #2 - %52 = add i64 %nhoff.1.i, 28 - %53 = call i64 @llvm.bpf.load.word(i8* %1, i64 %52) #2 - %54 = add i64 %nhoff.1.i, 32 - %55 = call i64 @llvm.bpf.load.word(i8* %1, i64 %54) #2 - %56 = add i64 %nhoff.1.i, 36 - %57 = call i64 @llvm.bpf.load.word(i8* %1, i64 %56) #2 - %58 = xor i64 %53, %51 - %59 = xor i64 %58, %55 - %60 = xor i64 %59, %57 - %61 = trunc i64 %60 to i32 - %62 = add i64 %nhoff.1.i, 40 - br label %parse_ip.exit.i - -parse_ip.exit.i: ; preds = %39, %35, %33 - %63 = phi i32 [ %61, %39 ], [ %29, %33 ], [ %29, %35 ] - %64 = phi i64 [ %41, %39 ], [ %30, %33 ], [ %30, %35 ] - %nhoff.2.i = phi i64 [ %62, %39 ], [ %34, %33 ], [ %38, %35 ] - switch i64 %64, label %187 [ - i64 47, label %65 - i64 4, label %137 - i64 41, label %163 - ] - -; <label>:65 ; preds = %parse_ip.exit.i - %66 = call i64 @llvm.bpf.load.half(i8* %1, i64 %nhoff.2.i) #2 - %67 = add i64 %nhoff.2.i, 2 - %68 = call i64 @llvm.bpf.load.half(i8* %1, i64 %67) #2 - %69 = and i64 %66, 1856 - %70 = icmp eq i64 %69, 0 - br i1 %70, label %71, label %187 - -; <label>:71 ; preds = %65 - %72 = lshr i64 %66, 5 - %73 = and i64 %72, 4 - %74 = add i64 %nhoff.2.i, 4 - %..i = add i64 %74, %73 - %75 = and i64 %66, 32 - %76 = icmp eq i64 %75, 0 - %77 = add i64 %..i, 4 - %nhoff.4.i = select i1 %76, i64 %..i, i64 %77 - %78 = and i64 %66, 16 - %79 = icmp eq i64 %78, 0 - %80 = add i64 %nhoff.4.i, 4 - %nhoff.4..i = select i1 %79, i64 %nhoff.4.i, i64 %80 - %81 = icmp eq i64 %68, 33024 - br i1 %81, label %82, label %86 - -; <label>:82 ; preds = %71 - %83 = add i64 %nhoff.4..i, 2 - %84 = call i64 @llvm.bpf.load.half(i8* %1, i64 %83) #2 - %85 = add i64 %nhoff.4..i, 4 - br label %86 - -; <label>:86 ; preds = %82, %71 - %proto.2.i = phi i64 [ %84, %82 ], [ %68, %71 ] - %nhoff.6.i = phi i64 [ %85, %82 ], [ %nhoff.4..i, %71 ] - switch i64 %proto.2.i, label %flow_dissector.exit.thread [ - i64 2048, label %87 - i64 34525, label %113 - ] - -; <label>:87 ; preds = %86 - %88 = add i64 %nhoff.6.i, 6 - %89 = call i64 @llvm.bpf.load.half(i8* %1, i64 %88) #2 - %90 = and i64 %89, 16383 - %91 = icmp eq i64 %90, 0 - br i1 %91, label %92, label %.thread.i4.i - -; <label>:92 ; preds = %87 - %93 = add i64 %nhoff.6.i, 9 - %94 = call i64 @llvm.bpf.load.byte(i8* %1, i64 %93) #2 - %95 = icmp eq i64 %94, 47 - br i1 %95, label %102, label %.thread.i4.i - -.thread.i4.i: ; preds = %92, %87 - %96 = phi i64 [ %94, %92 ], [ 0, %87 ] - %97 = add i64 %nhoff.6.i, 12 - %98 = call i64 @llvm.bpf.load.word(i8* %1, i64 %97) #2 - %99 = add i64 %nhoff.6.i, 16 - %100 = call i64 @llvm.bpf.load.word(i8* %1, i64 %99) #2 - %101 = trunc i64 %100 to i32 - br label %102 - -; <label>:102 ; preds = %.thread.i4.i, %92 - %103 = phi i32 [ %101, %.thread.i4.i ], [ %63, %92 ] - %104 = phi i64 [ %96, %.thread.i4.i ], [ 47, %92 ] - %105 = call i64 @llvm.bpf.load.byte(i8* %1, i64 %nhoff.6.i) #2 - %106 = icmp eq i64 %105, 69 - br i1 %106, label %107, label %109 - -; <label>:107 ; preds = %102 - %108 = add i64 %nhoff.6.i, 20 - br label %187 - -; <label>:109 ; preds = %102 - %110 = shl i64 %105, 2 - %111 = and i64 %110, 60 - %112 = add i64 %111, %nhoff.6.i - br label %187 - -; <label>:113 ; preds = %86 - %114 = add i64 %nhoff.6.i, 6 - %115 = call i64 @llvm.bpf.load.byte(i8* %1, i64 %114) #2 - %116 = add i64 %nhoff.6.i, 8 - %117 = call i64 @llvm.bpf.load.word(i8* %1, i64 %116) #2 - %118 = add i64 %nhoff.6.i, 12 - %119 = call i64 @llvm.bpf.load.word(i8* %1, i64 %118) #2 - %120 = add i64 %nhoff.6.i, 16 - %121 = call i64 @llvm.bpf.load.word(i8* %1, i64 %120) #2 - %122 = add i64 %nhoff.6.i, 20 - %123 = call i64 @llvm.bpf.load.word(i8* %1, i64 %122) #2 - %124 = add i64 %nhoff.6.i, 24 - %125 = call i64 @llvm.bpf.load.word(i8* %1, i64 %124) #2 - %126 = add i64 %nhoff.6.i, 28 - %127 = call i64 @llvm.bpf.load.word(i8* %1, i64 %126) #2 - %128 = add i64 %nhoff.6.i, 32 - %129 = call i64 @llvm.bpf.load.word(i8* %1, i64 %128) #2 - %130 = add i64 %nhoff.6.i, 36 - %131 = call i64 @llvm.bpf.load.word(i8* %1, i64 %130) #2 - %132 = xor i64 %127, %125 - %133 = xor i64 %132, %129 - %134 = xor i64 %133, %131 - %135 = trunc i64 %134 to i32 - %136 = add i64 %nhoff.6.i, 40 - br label %187 - -; <label>:137 ; preds = %parse_ip.exit.i - %138 = add i64 %nhoff.2.i, 6 - %139 = call i64 @llvm.bpf.load.half(i8* %1, i64 %138) #2 - %140 = and i64 %139, 16383 - %141 = icmp eq i64 %140, 0 - br i1 %141, label %142, label %.thread.i1.i - -; <label>:142 ; preds = %137 - %143 = add i64 %nhoff.2.i, 9 - %144 = call i64 @llvm.bpf.load.byte(i8* %1, i64 %143) #2 - %145 = icmp eq i64 %144, 47 - br i1 %145, label %152, label %.thread.i1.i - -.thread.i1.i: ; preds = %142, %137 - %146 = phi i64 [ %144, %142 ], [ 0, %137 ] - %147 = add i64 %nhoff.2.i, 12 - %148 = call i64 @llvm.bpf.load.word(i8* %1, i64 %147) #2 - %149 = add i64 %nhoff.2.i, 16 - %150 = call i64 @llvm.bpf.load.word(i8* %1, i64 %149) #2 - %151 = trunc i64 %150 to i32 - br label %152 - -; <label>:152 ; preds = %.thread.i1.i, %142 - %153 = phi i32 [ %151, %.thread.i1.i ], [ %63, %142 ] - %154 = phi i64 [ %146, %.thread.i1.i ], [ 47, %142 ] - %155 = call i64 @llvm.bpf.load.byte(i8* %1, i64 %nhoff.2.i) #2 - %156 = icmp eq i64 %155, 69 - br i1 %156, label %157, label %159 - -; <label>:157 ; preds = %152 - %158 = add i64 %nhoff.2.i, 20 - br label %187 - -; <label>:159 ; preds = %152 - %160 = shl i64 %155, 2 - %161 = and i64 %160, 60 - %162 = add i64 %161, %nhoff.2.i - br label %187 - -; <label>:163 ; preds = %parse_ip.exit.i - %164 = add i64 %nhoff.2.i, 6 - %165 = call i64 @llvm.bpf.load.byte(i8* %1, i64 %164) #2 - %166 = add i64 %nhoff.2.i, 8 - %167 = call i64 @llvm.bpf.load.word(i8* %1, i64 %166) #2 - %168 = add i64 %nhoff.2.i, 12 - %169 = call i64 @llvm.bpf.load.word(i8* %1, i64 %168) #2 - %170 = add i64 %nhoff.2.i, 16 - %171 = call i64 @llvm.bpf.load.word(i8* %1, i64 %170) #2 - %172 = add i64 %nhoff.2.i, 20 - %173 = call i64 @llvm.bpf.load.word(i8* %1, i64 %172) #2 - %174 = add i64 %nhoff.2.i, 24 - %175 = call i64 @llvm.bpf.load.word(i8* %1, i64 %174) #2 - %176 = add i64 %nhoff.2.i, 28 - %177 = call i64 @llvm.bpf.load.word(i8* %1, i64 %176) #2 - %178 = add i64 %nhoff.2.i, 32 - %179 = call i64 @llvm.bpf.load.word(i8* %1, i64 %178) #2 - %180 = add i64 %nhoff.2.i, 36 - %181 = call i64 @llvm.bpf.load.word(i8* %1, i64 %180) #2 - %182 = xor i64 %177, %175 - %183 = xor i64 %182, %179 - %184 = xor i64 %183, %181 - %185 = trunc i64 %184 to i32 - %186 = add i64 %nhoff.2.i, 40 - br label %187 - -; <label>:187 ; preds = %163, %159, %157, %113, %109, %107, %65, %parse_ip.exit.i - %188 = phi i32 [ %63, %parse_ip.exit.i ], [ %185, %163 ], [ %63, %65 ], [ %135, %113 ], [ %103, %107 ], [ %103, %109 ], [ %153, %157 ], [ %153, %159 ] - %189 = phi i64 [ %64, %parse_ip.exit.i ], [ %165, %163 ], [ 47, %65 ], [ %115, %113 ], [ %104, %107 ], [ %104, %109 ], [ %154, %157 ], [ %154, %159 ] - %nhoff.7.i = phi i64 [ %nhoff.2.i, %parse_ip.exit.i ], [ %186, %163 ], [ %nhoff.2.i, %65 ], [ %136, %113 ], [ %108, %107 ], [ %112, %109 ], [ %158, %157 ], [ %162, %159 ] - %cond.i.i = icmp eq i64 %189, 51 - %190 = select i1 %cond.i.i, i64 4, i64 0 - %191 = add i64 %190, %nhoff.7.i - %192 = call i64 @llvm.bpf.load.word(i8* %1, i64 %191) #2 - store i32 %188, i32* %key, align 4 - %193 = bitcast i32* %key to i8* - %194 = call i8* inttoptr (i64 1 to i8* (i8*, i8*)*)(i8* bitcast (%struct.bpf_map_def* @hash_map to i8*), i8* %193) #2 - %195 = icmp eq i8* %194, null - br i1 %195, label %199, label %196 - -; <label>:196 ; preds = %187 - %197 = bitcast i8* %194 to i64* - %198 = atomicrmw add i64* %197, i64 1 seq_cst - br label %flow_dissector.exit.thread - -; <label>:199 ; preds = %187 - store i64 1, i64* %val, align 8 - %200 = bitcast i64* %val to i8* - %201 = call i32 inttoptr (i64 2 to i32 (i8*, i8*, i8*, i64)*)(i8* bitcast (%struct.bpf_map_def* @hash_map to i8*), i8* %193, i8* %200, i64 0) #2 - br label %flow_dissector.exit.thread - -flow_dissector.exit.thread: ; preds = %86, %12, %196, %199 - ret i32 0 -; CHECK-LABEL: bpf_prog2: -; CHECK: r0 = *(u16 *)skb[12] # encoding: [0x28,0x00,0x00,0x00,0x0c,0x00,0x00,0x00] -; CHECK: r0 = *(u16 *)skb[16] # encoding: [0x28,0x00,0x00,0x00,0x10,0x00,0x00,0x00] -; CHECK: implicit-def: %R1 -; CHECK: r1 = -; CHECK: call 1 # encoding: [0x85,0x00,0x00,0x00,0x01,0x00,0x00,0x00] -; CHECK: call 2 # encoding: [0x85,0x00,0x00,0x00,0x02,0x00,0x00,0x00] -} - -declare i64 @llvm.bpf.load.half(i8*, i64) #1 - -declare i64 @llvm.bpf.load.word(i8*, i64) #1 - -declare i64 @llvm.bpf.load.byte(i8*, i64) #1 diff --git a/test/CodeGen/BPF/struct_ret1.ll b/test/CodeGen/BPF/struct_ret1.ll deleted file mode 100644 index 29486b56a272..000000000000 --- a/test/CodeGen/BPF/struct_ret1.ll +++ /dev/null @@ -1,17 +0,0 @@ -; RUN: not llc -march=bpf < %s 2> %t1 -; RUN: FileCheck %s < %t1 -; CHECK: only integer returns - -%struct.S = type { i32, i32, i32 } - -@s = common global %struct.S zeroinitializer, align 4 - -; Function Attrs: nounwind readonly uwtable -define { i64, i32 } @bar(i32 %a, i32 %b, i32 %c, i32 %d, i32 %e) #0 { -entry: - %retval.sroa.0.0.copyload = load i64, i64* bitcast (%struct.S* @s to i64*), align 4 - %retval.sroa.2.0.copyload = load i32, i32* getelementptr inbounds (%struct.S, %struct.S* @s, i64 0, i32 2), align 4 - %.fca.0.insert = insertvalue { i64, i32 } undef, i64 %retval.sroa.0.0.copyload, 0 - %.fca.1.insert = insertvalue { i64, i32 } %.fca.0.insert, i32 %retval.sroa.2.0.copyload, 1 - ret { i64, i32 } %.fca.1.insert -} diff --git a/test/CodeGen/BPF/struct_ret2.ll b/test/CodeGen/BPF/struct_ret2.ll deleted file mode 100644 index 90461205f7cf..000000000000 --- a/test/CodeGen/BPF/struct_ret2.ll +++ /dev/null @@ -1,12 +0,0 @@ -; RUN: not llc -march=bpf < %s 2> %t1 -; RUN: FileCheck %s < %t1 -; CHECK: only small returns - -; Function Attrs: nounwind uwtable -define { i64, i32 } @foo(i32 %a, i32 %b, i32 %c) #0 { -entry: - %call = tail call { i64, i32 } @bar(i32 %a, i32 %b, i32 %c, i32 1, i32 2) #3 - ret { i64, i32 } %call -} - -declare { i64, i32 } @bar(i32, i32, i32, i32, i32) #1 diff --git a/test/CodeGen/BPF/undef.ll b/test/CodeGen/BPF/undef.ll deleted file mode 100644 index de14bfde1ab9..000000000000 --- a/test/CodeGen/BPF/undef.ll +++ /dev/null @@ -1,73 +0,0 @@ -; RUN: not llc < %s -march=bpf | FileCheck %s - -%struct.bpf_map_def = type { i32, i32, i32, i32 } -%struct.__sk_buff = type opaque -%struct.routing_key_2 = type { [6 x i8] } - -@routing = global %struct.bpf_map_def { i32 1, i32 6, i32 12, i32 1024 }, section "maps", align 4 -@routing_miss_0 = global %struct.bpf_map_def { i32 1, i32 1, i32 12, i32 1 }, section "maps", align 4 -@test1 = global %struct.bpf_map_def { i32 2, i32 4, i32 8, i32 1024 }, section "maps", align 4 -@test1_miss_4 = global %struct.bpf_map_def { i32 2, i32 1, i32 8, i32 1 }, section "maps", align 4 -@_license = global [4 x i8] c"GPL\00", section "license", align 1 -@llvm.used = appending global [6 x i8*] [i8* getelementptr inbounds ([4 x i8], [4 x i8]* @_license, i32 0, i32 0), i8* bitcast (i32 (%struct.__sk_buff*)* @ebpf_filter to i8*), i8* bitcast (%struct.bpf_map_def* @routing to i8*), i8* bitcast (%struct.bpf_map_def* @routing_miss_0 to i8*), i8* bitcast (%struct.bpf_map_def* @test1 to i8*), i8* bitcast (%struct.bpf_map_def* @test1_miss_4 to i8*)], section "llvm.metadata" - -; Function Attrs: nounwind uwtable -define i32 @ebpf_filter(%struct.__sk_buff* nocapture readnone %ebpf_packet) #0 section "socket1" { -; CHECK: r2 = r10 -; CHECK: r2 += -2 -; CHECK: r1 = 0 -; CHECK: *(u16 *)(r2 + 6) = r1 -; CHECK: *(u16 *)(r2 + 4) = r1 -; CHECK: *(u16 *)(r2 + 2) = r1 -; CHECK: r2 = 6 -; CHECK: *(u8 *)(r10 - 7) = r2 -; CHECK: r2 = 5 -; CHECK: *(u8 *)(r10 - 8) = r2 -; CHECK: r2 = 7 -; CHECK: *(u8 *)(r10 - 6) = r2 -; CHECK: r2 = 8 -; CHECK: *(u8 *)(r10 - 5) = r2 -; CHECK: r2 = 9 -; CHECK: *(u8 *)(r10 - 4) = r2 -; CHECK: r2 = 10 -; CHECK: *(u8 *)(r10 - 3) = r2 -; CHECK: *(u16 *)(r10 + 24) = r1 -; CHECK: *(u16 *)(r10 + 22) = r1 -; CHECK: *(u16 *)(r10 + 20) = r1 -; CHECK: *(u16 *)(r10 + 18) = r1 -; CHECK: *(u16 *)(r10 + 16) = r1 -; CHECK: *(u16 *)(r10 + 14) = r1 -; CHECK: *(u16 *)(r10 + 12) = r1 -; CHECK: *(u16 *)(r10 + 10) = r1 -; CHECK: *(u16 *)(r10 + 8) = r1 -; CHECK: *(u16 *)(r10 + 6) = r1 -; CHECK: *(u16 *)(r10 - 2) = r1 -; CHECK: *(u16 *)(r10 + 26) = r1 -; CHECK: r2 = r10 -; CHECK: r2 += -8 -; CHECK: r1 = <MCOperand Expr:(routing)>ll -; CHECK: call bpf_map_lookup_elem -; CHECK: exit - %key = alloca %struct.routing_key_2, align 1 - %1 = getelementptr inbounds %struct.routing_key_2, %struct.routing_key_2* %key, i64 0, i32 0, i64 0 - store i8 5, i8* %1, align 1 - %2 = getelementptr inbounds %struct.routing_key_2, %struct.routing_key_2* %key, i64 0, i32 0, i64 1 - store i8 6, i8* %2, align 1 - %3 = getelementptr inbounds %struct.routing_key_2, %struct.routing_key_2* %key, i64 0, i32 0, i64 2 - store i8 7, i8* %3, align 1 - %4 = getelementptr inbounds %struct.routing_key_2, %struct.routing_key_2* %key, i64 0, i32 0, i64 3 - store i8 8, i8* %4, align 1 - %5 = getelementptr inbounds %struct.routing_key_2, %struct.routing_key_2* %key, i64 0, i32 0, i64 4 - store i8 9, i8* %5, align 1 - %6 = getelementptr inbounds %struct.routing_key_2, %struct.routing_key_2* %key, i64 0, i32 0, i64 5 - store i8 10, i8* %6, align 1 - %7 = getelementptr inbounds %struct.routing_key_2, %struct.routing_key_2* %key, i64 1, i32 0, i64 0 - call void @llvm.memset.p0i8.i64(i8* %7, i8 0, i64 30, i32 1, i1 false) - %8 = call i32 (%struct.bpf_map_def*, %struct.routing_key_2*, ...) bitcast (i32 (...)* @bpf_map_lookup_elem to i32 (%struct.bpf_map_def*, %struct.routing_key_2*, ...)*)(%struct.bpf_map_def* nonnull @routing, %struct.routing_key_2* nonnull %key) #3 - ret i32 undef -} - -; Function Attrs: nounwind argmemonly -declare void @llvm.memset.p0i8.i64(i8* nocapture, i8, i64, i32, i1) #1 - -declare i32 @bpf_map_lookup_elem(...) #2 diff --git a/test/CodeGen/BPF/vararg1.ll b/test/CodeGen/BPF/vararg1.ll deleted file mode 100644 index 4a22db65e692..000000000000 --- a/test/CodeGen/BPF/vararg1.ll +++ /dev/null @@ -1,9 +0,0 @@ -; RUN: not llc -march=bpf < %s 2> %t1 -; RUN: FileCheck %s < %t1 -; CHECK: with VarArgs - -; Function Attrs: nounwind readnone uwtable -define void @foo(i32 %a, ...) #0 { -entry: - ret void -} diff --git a/test/CodeGen/BPF/warn-call.ll b/test/CodeGen/BPF/warn-call.ll deleted file mode 100644 index ae7f78ac1aa8..000000000000 --- a/test/CodeGen/BPF/warn-call.ll +++ /dev/null @@ -1,69 +0,0 @@ -; RUN: not llc -march=bpfel < %s 2>&1 >/dev/null | FileCheck %s - -; CHECK: error: warn_call.c -; CHECK: built-in function 'memcpy' -; CHECK: error: warn_call.c -; CHECK: global function 'foo' -; CHECK: global function 'bar' -define i8* @warn(i8* returned, i8*, i64) local_unnamed_addr #0 !dbg !6 { - tail call void @llvm.dbg.value(metadata i8* %0, i64 0, metadata !14, metadata !17), !dbg !18 - tail call void @llvm.dbg.value(metadata i8* %1, i64 0, metadata !15, metadata !17), !dbg !19 - tail call void @llvm.dbg.value(metadata i64 %2, i64 0, metadata !16, metadata !17), !dbg !20 - tail call void @llvm.memcpy.p0i8.p0i8.i64(i8* %0, i8* %1, i64 %2, i32 1, i1 false), !dbg !21 - %4 = tail call i8* @foo(i8* %0, i8* %1, i64 %2) #5, !dbg !22 - %5 = tail call fastcc i8* @bar(i8* %0), !dbg !23 - ret i8* %5, !dbg !24 -} - -; Function Attrs: argmemonly nounwind -declare void @llvm.memcpy.p0i8.p0i8.i64(i8* nocapture writeonly, i8* nocapture readonly, i64, i32, i1) #1 - -declare i8* @foo(i8*, i8*, i64) local_unnamed_addr #2 - -; Function Attrs: noinline nounwind readnone -define internal fastcc i8* @bar(i8* readnone returned) unnamed_addr #3 !dbg !25 { - tail call void @llvm.dbg.value(metadata i8* null, i64 0, metadata !28, metadata !17), !dbg !30 - tail call void @llvm.dbg.value(metadata i64 0, i64 0, metadata !29, metadata !17), !dbg !31 - ret i8* %0, !dbg !32 -} - -; Function Attrs: nounwind readnone -declare void @llvm.dbg.value(metadata, i64, metadata, metadata) #4 - -!llvm.dbg.cu = !{!0} -!llvm.module.flags = !{!3, !4} -!llvm.ident = !{!5} - -!0 = distinct !DICompileUnit(language: DW_LANG_C99, file: !1, producer: "clang version 5.0.0 (trunk 292174) (llvm/trunk 292179)", isOptimized: true, runtimeVersion: 0, emissionKind: FullDebug, enums: !2) -!1 = !DIFile(filename: "warn_call.c", directory: "/w/llvm/bld") -!2 = !{} -!3 = !{i32 2, !"Dwarf Version", i32 4} -!4 = !{i32 2, !"Debug Info Version", i32 3} -!5 = !{!"clang version 5.0.0 (trunk 292174) (llvm/trunk 292179)"} -!6 = distinct !DISubprogram(name: "warn", scope: !1, file: !1, line: 4, type: !7, isLocal: false, isDefinition: true, scopeLine: 5, flags: DIFlagPrototyped, isOptimized: true, unit: !0, variables: !13) -!7 = !DISubroutineType(types: !8) -!8 = !{!9, !9, !10, !12} -!9 = !DIDerivedType(tag: DW_TAG_pointer_type, baseType: null, size: 64) -!10 = !DIDerivedType(tag: DW_TAG_pointer_type, baseType: !11, size: 64) -!11 = !DIDerivedType(tag: DW_TAG_const_type, baseType: null) -!12 = !DIBasicType(name: "long unsigned int", size: 64, encoding: DW_ATE_unsigned) -!13 = !{!14, !15, !16} -!14 = !DILocalVariable(name: "dst", arg: 1, scope: !6, file: !1, line: 4, type: !9) -!15 = !DILocalVariable(name: "src", arg: 2, scope: !6, file: !1, line: 4, type: !10) -!16 = !DILocalVariable(name: "len", arg: 3, scope: !6, file: !1, line: 4, type: !12) -!17 = !DIExpression() -!18 = !DILocation(line: 4, column: 18, scope: !6) -!19 = !DILocation(line: 4, column: 35, scope: !6) -!20 = !DILocation(line: 4, column: 54, scope: !6) -!21 = !DILocation(line: 6, column: 2, scope: !6) -!22 = !DILocation(line: 7, column: 2, scope: !6) -!23 = !DILocation(line: 8, column: 9, scope: !6) -!24 = !DILocation(line: 8, column: 2, scope: !6) -!25 = distinct !DISubprogram(name: "bar", scope: !1, file: !1, line: 2, type: !7, isLocal: true, isDefinition: true, scopeLine: 2, flags: DIFlagPrototyped, isOptimized: true, unit: !0, variables: !26) -!26 = !{!27, !28, !29} -!27 = !DILocalVariable(name: "dst", arg: 1, scope: !25, file: !1, line: 2, type: !9) -!28 = !DILocalVariable(name: "src", arg: 2, scope: !25, file: !1, line: 2, type: !10) -!29 = !DILocalVariable(name: "len", arg: 3, scope: !25, file: !1, line: 2, type: !12) -!30 = !DILocation(line: 2, column: 67, scope: !25) -!31 = !DILocation(line: 2, column: 86, scope: !25) -!32 = !DILocation(line: 2, column: 93, scope: !25) diff --git a/test/CodeGen/BPF/warn-stack.ll b/test/CodeGen/BPF/warn-stack.ll deleted file mode 100644 index 5a579d28554a..000000000000 --- a/test/CodeGen/BPF/warn-stack.ll +++ /dev/null @@ -1,76 +0,0 @@ -; RUN: not llc -march=bpfel < %s 2>&1 >/dev/null | FileCheck %s - -;; CHECK-NOT: nowarn -define void @nowarn() local_unnamed_addr #0 !dbg !6 { - %1 = alloca [504 x i8], align 1 - %2 = getelementptr inbounds [504 x i8], [504 x i8]* %1, i64 0, i64 0, !dbg !15 - call void @llvm.lifetime.start.p0i8(i64 504, i8* nonnull %2) #4, !dbg !15 - tail call void @llvm.dbg.declare(metadata [504 x i8]* %1, metadata !10, metadata !16), !dbg !17 - call void @doit(i8* nonnull %2) #4, !dbg !18 - call void @llvm.lifetime.end.p0i8(i64 504, i8* nonnull %2) #4, !dbg !19 - ret void, !dbg !19 -} - -; Function Attrs: argmemonly nounwind -declare void @llvm.lifetime.start.p0i8(i64, i8* nocapture) #1 - -; Function Attrs: nounwind readnone -declare void @llvm.dbg.declare(metadata, metadata, metadata) #2 - -declare void @doit(i8*) local_unnamed_addr #3 - -; Function Attrs: argmemonly nounwind -declare void @llvm.lifetime.end.p0i8(i64, i8* nocapture) #1 - -; CHECK: error: warn_stack.c -; CHECK: BPF stack limit -define void @warn() local_unnamed_addr #0 !dbg !20 { - %1 = alloca [512 x i8], align 1 - %2 = getelementptr inbounds [512 x i8], [512 x i8]* %1, i64 0, i64 0, !dbg !26 - call void @llvm.lifetime.start.p0i8(i64 512, i8* nonnull %2) #4, !dbg !26 - tail call void @llvm.dbg.declare(metadata [512 x i8]* %1, metadata !22, metadata !16), !dbg !27 - call void @doit(i8* nonnull %2) #4, !dbg !28 - call void @llvm.lifetime.end.p0i8(i64 512, i8* nonnull %2) #4, !dbg !29 - ret void, !dbg !29 -} - -attributes #0 = { nounwind "correctly-rounded-divide-sqrt-fp-math"="false" "disable-tail-calls"="false" "less-precise-fpmad"="false" "no-frame-pointer-elim"="true" "no-frame-pointer-elim-non-leaf" "no-infs-fp-math"="false" "no-jump-tables"="false" "no-nans-fp-math"="false" "no-signed-zeros-fp-math"="false" "no-trapping-math"="false" "stack-protector-buffer-size"="8" "unsafe-fp-math"="false" "use-soft-float"="false" } -attributes #1 = { argmemonly nounwind } -attributes #2 = { nounwind readnone } -attributes #3 = { "correctly-rounded-divide-sqrt-fp-math"="false" "disable-tail-calls"="false" "less-precise-fpmad"="false" "no-frame-pointer-elim"="true" "no-frame-pointer-elim-non-leaf" "no-infs-fp-math"="false" "no-nans-fp-math"="false" "no-signed-zeros-fp-math"="false" "no-trapping-math"="false" "stack-protector-buffer-size"="8" "unsafe-fp-math"="false" "use-soft-float"="false" } -attributes #4 = { nounwind } - -!llvm.dbg.cu = !{!0} -!llvm.module.flags = !{!3, !4} -!llvm.ident = !{!5} - -!0 = distinct !DICompileUnit(language: DW_LANG_C99, file: !1, producer: "clang version 5.0.0 (trunk 292141) (llvm/trunk 292156)", isOptimized: true, runtimeVersion: 0, emissionKind: FullDebug, enums: !2) -!1 = !DIFile(filename: "warn_stack.c", directory: "/w/llvm/bld") -!2 = !{} -!3 = !{i32 2, !"Dwarf Version", i32 4} -!4 = !{i32 2, !"Debug Info Version", i32 3} -!5 = !{!"clang version 5.0.0 (trunk 292141) (llvm/trunk 292156)"} -!6 = distinct !DISubprogram(name: "nowarn", scope: !1, file: !1, line: 2, type: !7, isLocal: false, isDefinition: true, scopeLine: 3, flags: DIFlagPrototyped, isOptimized: true, unit: !0, variables: !9) -!7 = !DISubroutineType(types: !8) -!8 = !{null} -!9 = !{!10} -!10 = !DILocalVariable(name: "buf", scope: !6, file: !1, line: 4, type: !11) -!11 = !DICompositeType(tag: DW_TAG_array_type, baseType: !12, size: 4088, elements: !13) -!12 = !DIBasicType(name: "char", size: 8, encoding: DW_ATE_signed_char) -!13 = !{!14} -!14 = !DISubrange(count: 504) -!15 = !DILocation(line: 4, column: 2, scope: !6) -!16 = !DIExpression() -!17 = !DILocation(line: 4, column: 7, scope: !6) -!18 = !DILocation(line: 5, column: 2, scope: !6) -!19 = !DILocation(line: 6, column: 1, scope: !6) -!20 = distinct !DISubprogram(name: "warn", scope: !1, file: !1, line: 7, type: !7, isLocal: false, isDefinition: true, scopeLine: 8, flags: DIFlagPrototyped, isOptimized: true, unit: !0, variables: !21) -!21 = !{!22} -!22 = !DILocalVariable(name: "buf", scope: !20, file: !1, line: 9, type: !23) -!23 = !DICompositeType(tag: DW_TAG_array_type, baseType: !12, size: 4096, elements: !24) -!24 = !{!25} -!25 = !DISubrange(count: 512) -!26 = !DILocation(line: 9, column: 2, scope: !20) -!27 = !DILocation(line: 9, column: 7, scope: !20) -!28 = !DILocation(line: 10, column: 2, scope: !20) -!29 = !DILocation(line: 11, column: 1, scope: !20) |
