[HLSL] Implement RWBuffer::operator[] via __builtin_hlsl_resource_getpointer (#117017)
[llvm-project.git] / llvm / test / CodeGen / Hexagon / hwloop-long.ll
blobeb9627b846f5130e6de324d9c5fba0c2ae572728
1 ; RUN: llc -march=hexagon < %s | FileCheck %s
3 ; Test that we generate a hardware loop for long long counters.
4 ; Tests signed/unsigned GT, EQ, and NEQ cases.
6 ; signed GT case
7 ; CHECK-LABEL: f0:
8 ; CHECK: loop0
9 define i32 @f0(ptr nocapture %a0) #0 {
10 b0:
11   br label %b1
12 b1:                                               ; preds = %b1, %b0
13   %v0 = phi i32 [ 0, %b0 ], [ %v5, %b1 ]
14   %v1 = phi i64 [ 0, %b0 ], [ %v6, %b1 ]
15   %v2 = trunc i64 %v1 to i32
16   %v3 = getelementptr inbounds i32, ptr %a0, i32 %v2
17   %v4 = load i32, ptr %v3, align 4
18   %v5 = add nsw i32 %v4, %v0
19   %v6 = add nsw i64 %v1, 1
20   %v7 = icmp slt i64 %v6, 8
21   br i1 %v7, label %b1, label %b2
23 b2:                                               ; preds = %b1
24   ret i32 %v5
27 ; unsigned signed GT case
28 ; CHECK-LABEL: f1:
29 ; CHECK: loop0
30 define i32 @f1(ptr nocapture %a0) #0 {
31 b0:
32   br label %b1
33 b1:                                               ; preds = %b1, %b0
34   %v0 = phi i32 [ 0, %b0 ], [ %v5, %b1 ]
35   %v1 = phi i64 [ 0, %b0 ], [ %v6, %b1 ]
36   %v2 = trunc i64 %v1 to i32
37   %v3 = getelementptr inbounds i32, ptr %a0, i32 %v2
38   %v4 = load i32, ptr %v3, align 4
39   %v5 = add nsw i32 %v4, %v0
40   %v6 = add i64 %v1, 1
41   %v7 = icmp ult i64 %v6, 8
42   br i1 %v7, label %b1, label %b2
44 b2:                                               ; preds = %b1
45   ret i32 %v5
48 ; EQ case
49 ; CHECK-LABEL: f2:
50 ; CHECK: loop0
51 define i32 @f2(ptr nocapture %a0) #0 {
52 b0:
53   br label %b1
55 b1:                                               ; preds = %b1, %b0
56   %v0 = phi i32 [ 0, %b0 ], [ %v5, %b1 ]
57   %v1 = phi i64 [ 0, %b0 ], [ %v6, %b1 ]
58   %v2 = trunc i64 %v1 to i32
59   %v3 = getelementptr inbounds i32, ptr %a0, i32 %v2
60   %v4 = load i32, ptr %v3, align 4
61   %v5 = add nsw i32 %v4, %v0
62   %v6 = add nsw i64 %v1, 1
63   %v7 = icmp eq i64 %v6, 8
64   br i1 %v7, label %b2, label %b1
66 b2:                                               ; preds = %b1
67   ret i32 %v5
70 attributes #0 = { nounwind readonly "target-cpu"="hexagonv55" }