[RISCV] Support 'f' Inline Assembly Constraint
[llvm-core.git] / test / CodeGen / BPF / select_ri.ll
blob61e852d74b0832c662d51d288ad3137a542cf099
1 ; RUN: llc < %s -march=bpf -mcpu=v2 -verify-machineinstrs | FileCheck %s
3 ; Source file:
4 ; int b, c;
5 ; int test() {
6 ;   int a = b;
7 ;   if (a)
8 ;     a = c;
9 ;   return a;
10 ; }
11 @b = common local_unnamed_addr global i32 0, align 4
12 @c = common local_unnamed_addr global i32 0, align 4
14 ; Function Attrs: norecurse nounwind readonly
15 define i32 @test() local_unnamed_addr #0 {
16 entry:
17   %0 = load i32, i32* @b, align 4
18   %tobool = icmp eq i32 %0, 0
19   %1 = load i32, i32* @c, align 4
20   %. = select i1 %tobool, i32 0, i32 %1
21 ; CHECK:  r1 = b
22 ; CHECK:  r1 = *(u32 *)(r1 + 0)
23 ; CHECK:  if r1 == 0 goto
24   ret i32 %.
27 attributes #0 = { norecurse nounwind readonly }
29 ; test immediate out of 32-bit range
30 ; Source file:
32 ; unsigned long long
33 ; load_word(void *buf, unsigned long long off)
34 ; asm("llvm.bpf.load.word");
36 ; int
37 ; foo(void *buf)
38 ; {
39 ;  unsigned long long sum = 0;
41 ;  sum += load_word(buf, 100);
42 ;  sum += load_word(buf, 104);
44 ;  if (sum != 0x1ffffffffULL)
45 ;    return ~0U;
47 ;  return 0;
50 ; Function Attrs: nounwind readonly
51 define i32 @foo(i8*) local_unnamed_addr #0 {
52   %2 = tail call i64 @llvm.bpf.load.word(i8* %0, i64 100)
53   %3 = tail call i64 @llvm.bpf.load.word(i8* %0, i64 104)
54   %4 = add i64 %3, %2
55   %5 = icmp ne i64 %4, 8589934591
56 ; CHECK:  r{{[0-9]+}} = 8589934591 ll
57   %6 = sext i1 %5 to i32
58   ret i32 %6
61 ; Function Attrs: nounwind readonly
62 declare i64 @llvm.bpf.load.word(i8*, i64) #1
64 ; Source file:
65 ; int m, n;
66 ; int test2() {
67 ;   int a = m;
68 ;   if (a < 6)
69 ;     a = n;
70 ;   return a;
71 ; }
73 @m = common local_unnamed_addr global i32 0, align 4
74 @n = common local_unnamed_addr global i32 0, align 4
76 ; Function Attrs: norecurse nounwind readonly
77 define i32 @test2() local_unnamed_addr #0 {
78 entry:
79   %0 = load i32, i32* @m, align 4
80   %cmp = icmp slt i32 %0, 6
81 ; CHECK:  if r{{[0-9]+}} s{{<|>}} 6 goto
82   %1 = load i32, i32* @n, align 4
83   %spec.select = select i1 %cmp, i32 %1, i32 %0
84   ret i32 %spec.select
87 attributes #0 = { norecurse nounwind readonly }