[MIParser] Set RegClassOrRegBank during instruction parsing
[llvm-complete.git] / test / CodeGen / BPF / 32-bit-subreg-load-store.ll
blob9906cee35ddec7426728315d67dfeb9940d263a4
1 ; RUN: llc -O2 -march=bpfel -mattr=+alu32 < %s | FileCheck %s
3 ; unsigned char loadu8(unsigned char *p)
4 ; {
5 ;   return *p;
6 ; }
8 ; unsigned short loadu16(unsigned short *p)
9 ; {
10 ;   return *p;
11 ; }
13 ; unsigned loadu32(unsigned *p)
14 ; {
15 ;   return *p;
16 ; }
18 ; unsigned long long loadu64(unsigned long long *p)
19 ; {
20 ;   return *p;
21 ; }
23 ; void storeu8(unsigned char *p, unsigned long long v)
24 ; {
25 ;   *p = (unsigned char)v;
26 ; }
28 ; void storeu16(unsigned short *p, unsigned long long v)
29 ; {
30 ;   *p = (unsigned short)v;
31 ; }
33 ; void storeu32(unsigned *p, unsigned long long v)
34 ; {
35 ;   *p = (unsigned)v;
36 ; }
38 ; void storeu64(unsigned long long *p, unsigned long long v)
39 ; {
40 ;   *p = v;
41 ; }
42 ; Function Attrs: norecurse nounwind readonly
43 define dso_local zeroext i8 @loadu8(i8* nocapture readonly %p) local_unnamed_addr #0 {
44 entry:
45   %0 = load i8, i8* %p, align 1
46 ; CHECK: w{{[0-9]+}} = *(u8 *)(r{{[0-9]+}} + 0)
47   ret i8 %0
50 ; Function Attrs: norecurse nounwind readonly
51 define dso_local zeroext i16 @loadu16(i16* nocapture readonly %p) local_unnamed_addr #0 {
52 entry:
53   %0 = load i16, i16* %p, align 2
54 ; CHECK: w{{[0-9]+}} = *(u16 *)(r{{[0-9]+}} + 0)
55   ret i16 %0
58 ; Function Attrs: norecurse nounwind readonly
59 define dso_local i32 @loadu32(i32* nocapture readonly %p) local_unnamed_addr #0 {
60 entry:
61   %0 = load i32, i32* %p, align 4
62 ; CHECK: w{{[0-9]+}} = *(u32 *)(r{{[0-9]+}} + 0)
63   ret i32 %0
66 ; Function Attrs: norecurse nounwind readonly
67 define dso_local i64 @loadu64(i64* nocapture readonly %p) local_unnamed_addr #0 {
68 entry:
69   %0 = load i64, i64* %p, align 8
70 ; CHECK: r{{[0-9]+}} = *(u64 *)(r{{[0-9]+}} + 0)
71   ret i64 %0
74 ; Function Attrs: norecurse nounwind
75 define dso_local void @storeu8(i8* nocapture %p, i64 %v) local_unnamed_addr #1 {
76 entry:
77   %conv = trunc i64 %v to i8
78   store i8 %conv, i8* %p, align 1
79 ; CHECK: *(u8 *)(r{{[0-9]+}} + 0) = w{{[0-9]+}}
80   ret void
83 ; Function Attrs: norecurse nounwind
84 define dso_local void @storeu16(i16* nocapture %p, i64 %v) local_unnamed_addr #1 {
85 entry:
86   %conv = trunc i64 %v to i16
87   store i16 %conv, i16* %p, align 2
88 ; CHECK: *(u16 *)(r{{[0-9]+}} + 0) = w{{[0-9]+}}
89   ret void
92 ; Function Attrs: norecurse nounwind
93 define dso_local void @storeu32(i32* nocapture %p, i64 %v) local_unnamed_addr #1 {
94 entry:
95   %conv = trunc i64 %v to i32
96   store i32 %conv, i32* %p, align 4
97 ; CHECK: *(u32 *)(r{{[0-9]+}} + 0) = w{{[0-9]+}}
98   ret void
101 ; Function Attrs: norecurse nounwind
102 define dso_local void @storeu64(i64* nocapture %p, i64 %v) local_unnamed_addr #1 {
103 entry:
104   store i64 %v, i64* %p, align 8
105 ; CHECK: *(u64 *)(r{{[0-9]+}} + 0) = r{{[0-9]+}}
106   ret void