Home | History | Annotate | Download | only in BPF
      1 ; RUN: llc -O2 -march=bpfel -mattr=+alu32 < %s | FileCheck %s
      2 ;
      3 ; unsigned char loadu8(unsigned char *p)
      4 ; {
      5 ;   return *p;
      6 ; }
      7 ;
      8 ; unsigned short loadu16(unsigned short *p)
      9 ; {
     10 ;   return *p;
     11 ; }
     12 ;
     13 ; unsigned loadu32(unsigned *p)
     14 ; {
     15 ;   return *p;
     16 ; }
     17 ;
     18 ; unsigned long long loadu64(unsigned long long *p)
     19 ; {
     20 ;   return *p;
     21 ; }
     22 ;
     23 ; void storeu8(unsigned char *p, unsigned long long v)
     24 ; {
     25 ;   *p = (unsigned char)v;
     26 ; }
     27 ;
     28 ; void storeu16(unsigned short *p, unsigned long long v)
     29 ; {
     30 ;   *p = (unsigned short)v;
     31 ; }
     32 ;
     33 ; void storeu32(unsigned *p, unsigned long long v)
     34 ; {
     35 ;   *p = (unsigned)v;
     36 ; }
     37 ;
     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
     48 }
     49 
     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
     56 }
     57 
     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
     64 }
     65 
     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
     72 }
     73 
     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
     81 }
     82 
     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
     90 }
     91 
     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
     99 }
    100 
    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
    107 }
    108