Home | History | Annotate | Download | only in Hexagon
      1 ; RUN: llc -march=hexagon < %s | FileCheck %s
      2 
      3 ; Check that store is post-incremented.
      4 ; CHECK: memd(r{{[0-9]+}}++#8) = r
      5 
      6 ; Function Attrs: nounwind
      7 define void @f0(i32 %a0, i16* nocapture %a1, i16 signext %a2) #0 {
      8 b0:
      9   %v0 = icmp eq i32 %a0, 0
     10   br i1 %v0, label %b2, label %b3
     11 
     12 b1:                                               ; preds = %b10
     13   br label %b2
     14 
     15 b2:                                               ; preds = %b7, %b1, %b0
     16   ret void
     17 
     18 b3:                                               ; preds = %b0
     19   %v1 = icmp sgt i32 %a0, 3
     20   br i1 %v1, label %b4, label %b7
     21 
     22 b4:                                               ; preds = %b3
     23   %v2 = add i32 %a0, -1
     24   %v3 = and i32 %v2, -4
     25   %v4 = icmp sgt i32 %v3, 0
     26   br i1 %v4, label %b5, label %b7
     27 
     28 b5:                                               ; preds = %b4
     29   %v5 = insertelement <4 x i16> undef, i16 %a2, i32 0
     30   %v6 = insertelement <4 x i16> %v5, i16 %a2, i32 1
     31   %v7 = insertelement <4 x i16> %v6, i16 %a2, i32 2
     32   %v8 = insertelement <4 x i16> %v7, i16 %a2, i32 3
     33   br label %b9
     34 
     35 b6:                                               ; preds = %b9
     36   br label %b7
     37 
     38 b7:                                               ; preds = %b6, %b4, %b3
     39   %v9 = phi i32 [ 0, %b3 ], [ %v3, %b4 ], [ %v3, %b6 ]
     40   %v10 = icmp slt i32 %v9, %a0
     41   br i1 %v10, label %b8, label %b2
     42 
     43 b8:                                               ; preds = %b7
     44   br label %b10
     45 
     46 b9:                                               ; preds = %b9, %b5
     47   %v11 = phi i32 [ 0, %b5 ], [ %v12, %b9 ]
     48   %v12 = add nsw i32 %v11, 4
     49   %v13 = getelementptr i16, i16* %a1, i32 %v11
     50   %v14 = bitcast i16* %v13 to <4 x i16>*
     51   %v15 = load <4 x i16>, <4 x i16>* %v14, align 16
     52   %v16 = add <4 x i16> %v15, %v8
     53   store <4 x i16> %v16, <4 x i16>* %v14, align 16
     54   %v17 = icmp slt i32 %v12, %v3
     55   br i1 %v17, label %b9, label %b6
     56 
     57 b10:                                              ; preds = %b10, %b8
     58   %v18 = phi i32 [ %v19, %b10 ], [ %v9, %b8 ]
     59   %v19 = add nsw i32 %v18, 1
     60   %v20 = getelementptr i16, i16* %a1, i32 %v18
     61   %v21 = load i16, i16* %v20, align 2
     62   %v22 = add i16 %v21, %a2
     63   store i16 %v22, i16* %v20, align 2
     64   %v23 = icmp eq i32 %v19, %a0
     65   br i1 %v23, label %b1, label %b10
     66 }
     67 
     68 attributes #0 = { nounwind "target-cpu"="hexagonv55" }
     69