Skip to content

Commit 066dc35

Browse files
committed
add lit test for tptr-to-llvm
1 parent 6b54e4f commit 066dc35

File tree

1 file changed

+93
-0
lines changed

1 file changed

+93
-0
lines changed
Lines changed: 93 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,93 @@
1+
// RUN: triton-shared-opt --tptr-to-llvm %s | FileCheck %s
2+
3+
module {
4+
llvm.func @simple_cf_ptradd(%arg0: i64, %arg1: !llvm.ptr, %arg2: i64, %arg3: !llvm.ptr, %arg4: i64, %arg5: !llvm.ptr, %arg6: i32, %arg7: i32, %arg8: i32, %arg9: i32, %arg10: i32, %arg11: i32) {
5+
%0 = llvm.mlir.poison : !llvm.struct<(i64, ptr)>
6+
%1 = llvm.insertvalue %arg4, %0[0] : !llvm.struct<(i64, ptr)>
7+
%2 = llvm.insertvalue %arg5, %1[1] : !llvm.struct<(i64, ptr)>
8+
%3 = builtin.unrealized_conversion_cast %2 : !llvm.struct<(i64, ptr)> to memref<*xf32>
9+
%4 = llvm.mlir.poison : !llvm.struct<(i64, ptr)>
10+
%5 = llvm.insertvalue %arg2, %4[0] : !llvm.struct<(i64, ptr)>
11+
%6 = llvm.insertvalue %arg3, %5[1] : !llvm.struct<(i64, ptr)>
12+
%7 = builtin.unrealized_conversion_cast %6 : !llvm.struct<(i64, ptr)> to memref<*xi64>
13+
%8 = llvm.mlir.poison : !llvm.struct<(i64, ptr)>
14+
%9 = llvm.insertvalue %arg0, %8[0] : !llvm.struct<(i64, ptr)>
15+
%10 = llvm.insertvalue %arg1, %9[1] : !llvm.struct<(i64, ptr)>
16+
%11 = builtin.unrealized_conversion_cast %10 : !llvm.struct<(i64, ptr)> to memref<*xi64>
17+
%12 = builtin.unrealized_conversion_cast %11 : memref<*xi64> to !llvm.struct<(i64, ptr)>
18+
%13 = builtin.unrealized_conversion_cast %7 : memref<*xi64> to !llvm.struct<(i64, ptr)>
19+
%14 = builtin.unrealized_conversion_cast %3 : memref<*xf32> to !llvm.struct<(i64, ptr)>
20+
%15 = llvm.mlir.constant(0 : i32) : i32
21+
%16 = llvm.mlir.constant(2 : i32) : i32
22+
%17 = llvm.mlir.constant(3 : i32) : i32
23+
%18 = llvm.mlir.constant(0 : index) : i64
24+
%19 = llvm.extractvalue %14[1] : !llvm.struct<(i64, ptr)>
25+
%20 = llvm.load %19 : !llvm.ptr -> !llvm.struct<(ptr, ptr, i64, array<1 x i64>, array<1 x i64>)>
26+
%21 = builtin.unrealized_conversion_cast %20 : !llvm.struct<(ptr, ptr, i64, array<1 x i64>, array<1 x i64>)> to memref<1xf32>
27+
%22 = tptr.from_memref %21 : memref<1xf32> to !tt.ptr<f32>
28+
%23 = llvm.extractvalue %13[1] : !llvm.struct<(i64, ptr)>
29+
%24 = llvm.load %23 : !llvm.ptr -> !llvm.struct<(ptr, ptr, i64, array<1 x i64>, array<1 x i64>)>
30+
%25 = builtin.unrealized_conversion_cast %24 : !llvm.struct<(ptr, ptr, i64, array<1 x i64>, array<1 x i64>)> to memref<1xi64>
31+
%26 = tptr.from_memref %25 : memref<1xi64> to !tt.ptr<i64>
32+
%27 = llvm.extractvalue %12[1] : !llvm.struct<(i64, ptr)>
33+
%28 = llvm.load %27 : !llvm.ptr -> !llvm.struct<(ptr, ptr, i64, array<1 x i64>, array<1 x i64>)>
34+
%29 = builtin.unrealized_conversion_cast %28 : !llvm.struct<(ptr, ptr, i64, array<1 x i64>, array<1 x i64>)> to memref<1xi64>
35+
%30 = tptr.from_memref %29 : memref<1xi64> to !tt.ptr<i64>
36+
%31 = llvm.srem %arg9, %16 : i32
37+
%32 = llvm.icmp "eq" %31, %15 : i32
38+
cf.cond_br %32, ^bb1(%30, %16 : !tt.ptr<i64>, i32), ^bb1(%26, %17 : !tt.ptr<i64>, i32)
39+
^bb1(%33: !tt.ptr<i64>, %34: i32): // 2 preds: ^bb0, ^bb0
40+
%35 = tptr.ptradd %33 %34 : !tt.ptr<i64>, i32 to !tt.ptr<i64>
41+
cf.br ^bb2
42+
^bb2: // pred: ^bb1
43+
cf.br ^bb3
44+
^bb3: // pred: ^bb2
45+
%36 = tptr.ptradd %35 %arg9 : !tt.ptr<i64>, i32 to !tt.ptr<i64>
46+
%37 = tptr.to_memref %36 : !tt.ptr<i64> to memref<1xi64>
47+
%38 = builtin.unrealized_conversion_cast %37 : memref<1xi64> to !llvm.struct<(ptr, ptr, i64, array<1 x i64>, array<1 x i64>)>
48+
%39 = llvm.extractvalue %38[1] : !llvm.struct<(ptr, ptr, i64, array<1 x i64>, array<1 x i64>)>
49+
%40 = llvm.getelementptr inbounds|nuw %39[%18] : (!llvm.ptr, i64) -> !llvm.ptr, i64
50+
%41 = llvm.load %40 : !llvm.ptr -> i64
51+
%42 = tptr.ptradd %22 %arg9 : !tt.ptr<f32>, i32 to !tt.ptr<f32>
52+
%43 = llvm.sitofp %41 : i64 to f32
53+
%44 = tptr.to_memref %42 : !tt.ptr<f32> to memref<1xf32>
54+
%45 = builtin.unrealized_conversion_cast %44 : memref<1xf32> to !llvm.struct<(ptr, ptr, i64, array<1 x i64>, array<1 x i64>)>
55+
%46 = llvm.extractvalue %45[1] : !llvm.struct<(ptr, ptr, i64, array<1 x i64>, array<1 x i64>)>
56+
%47 = llvm.getelementptr inbounds|nuw %46[%18] : (!llvm.ptr, i64) -> !llvm.ptr, f32
57+
llvm.store %43, %47 : f32, !llvm.ptr
58+
llvm.return
59+
}
60+
}
61+
62+
63+
// NOTE: Assertions have been autogenerated by utils/generate-test-checks.py
64+
65+
// The script is designed to make adding checks to
66+
// a test case fast, it is *not* designed to be authoritative
67+
// about what constitutes a good test! The CHECK should be
68+
// minimized and named to reflect the test intent.
69+
70+
// CHECK-LABEL: llvm.func @simple_cf_ptradd(
71+
// CHECK-SAME: %[[VAL_0:.*]]: i64, %[[VAL_1:.*]]: !llvm.ptr, %[[VAL_2:.*]]: i64, %[[VAL_3:.*]]: !llvm.ptr, %[[VAL_4:.*]]: i64, %[[VAL_5:.*]]: !llvm.ptr, %[[VAL_6:.*]]: i32, %[[VAL_7:.*]]: i32, %[[VAL_8:.*]]: i32, %[[VAL_9:.*]]: i32, %[[VAL_10:.*]]: i32, %[[VAL_11:.*]]: i32) {
72+
// CHECK: %[[VAL_12:.*]] = llvm.mlir.constant(3 : i32) : i32
73+
// CHECK: %[[VAL_13:.*]] = llvm.mlir.constant(2 : i32) : i32
74+
// CHECK: %[[VAL_14:.*]] = llvm.mlir.constant(0 : i32) : i32
75+
// CHECK: %[[VAL_15:.*]] = llvm.load %[[VAL_5]] : !llvm.ptr -> !llvm.struct<(ptr, ptr, i64, array<1 x i64>, array<1 x i64>)>
76+
// CHECK: %[[VAL_16:.*]] = llvm.extractvalue %[[VAL_15]][0] : !llvm.struct<(ptr, ptr, i64, array<1 x i64>, array<1 x i64>)>
77+
// CHECK: %[[VAL_17:.*]] = llvm.load %[[VAL_3]] : !llvm.ptr -> !llvm.struct<(ptr, ptr, i64, array<1 x i64>, array<1 x i64>)>
78+
// CHECK: %[[VAL_18:.*]] = llvm.extractvalue %[[VAL_17]][0] : !llvm.struct<(ptr, ptr, i64, array<1 x i64>, array<1 x i64>)>
79+
// CHECK: %[[VAL_19:.*]] = llvm.load %[[VAL_1]] : !llvm.ptr -> !llvm.struct<(ptr, ptr, i64, array<1 x i64>, array<1 x i64>)>
80+
// CHECK: %[[VAL_20:.*]] = llvm.extractvalue %[[VAL_19]][0] : !llvm.struct<(ptr, ptr, i64, array<1 x i64>, array<1 x i64>)>
81+
// CHECK: %[[VAL_21:.*]] = llvm.srem %[[VAL_9]], %[[VAL_13]] : i32
82+
// CHECK: %[[VAL_22:.*]] = llvm.icmp "eq" %[[VAL_21]], %[[VAL_14]] : i32
83+
// CHECK: %[[VAL_23:.*]] = arith.select %[[VAL_22]], %[[VAL_20]], %[[VAL_18]] : !llvm.ptr
84+
// CHECK: %[[VAL_24:.*]] = arith.select %[[VAL_22]], %[[VAL_13]], %[[VAL_12]] : i32
85+
// CHECK: %[[VAL_25:.*]] = llvm.getelementptr %[[VAL_23]]{{\[}}%[[VAL_24]]] : (!llvm.ptr, i32) -> !llvm.ptr, i64
86+
// CHECK: %[[VAL_26:.*]] = llvm.getelementptr %[[VAL_25]]{{\[}}%[[VAL_9]]] : (!llvm.ptr, i32) -> !llvm.ptr, i64
87+
// CHECK: %[[VAL_27:.*]] = llvm.load %[[VAL_26]] : !llvm.ptr -> i64
88+
// CHECK: %[[VAL_28:.*]] = llvm.getelementptr %[[VAL_16]]{{\[}}%[[VAL_9]]] : (!llvm.ptr, i32) -> !llvm.ptr, f32
89+
// CHECK: %[[VAL_29:.*]] = llvm.sitofp %[[VAL_27]] : i64 to f32
90+
// CHECK: llvm.store %[[VAL_29]], %[[VAL_28]] : f32, !llvm.ptr
91+
// CHECK: llvm.return
92+
// CHECK: }
93+

0 commit comments

Comments
 (0)