[AMDGPU] Make v8i16/v8f16 legal
[llvm-project.git] / mlir / test / Integration / Dialect / LLVMIR / CPU / test-vector-reductions-int.mlir
blob74e8667bf2ecaf0982a17b809c1f29450ec21efe
1 // RUN: mlir-cpu-runner %s -e entry -entry-point-result=void  \
2 // RUN: -shared-libs=%mlir_integration_test_dir/libmlir_c_runner_utils%shlibext | \
3 // RUN: FileCheck %s
5 // End-to-end test of all int reduction intrinsics (not exhaustive unit tests).
6 module {
7   llvm.func @printNewline()
8   llvm.func @printI64(i64)
9   llvm.func @entry() {
10     // Setup (1,2,3,4).
11     %0 = llvm.mlir.constant(1 : i64) : i64
12     %1 = llvm.mlir.constant(2 : i64) : i64
13     %2 = llvm.mlir.constant(3 : i64) : i64
14     %3 = llvm.mlir.constant(4 : i64) : i64
15     %4 = llvm.mlir.undef : vector<4xi64>
16     %5 = llvm.mlir.constant(0 : index) : i64
17     %6 = llvm.insertelement %0, %4[%5 : i64] : vector<4xi64>
18     %7 = llvm.shufflevector %6, %4 [0 : i64, 0 : i64, 0 : i64, 0 : i64]
19         : vector<4xi64>, vector<4xi64>
20     %8 = llvm.mlir.constant(1 : i64) : i64
21     %9 = llvm.insertelement %1, %7[%8 : i64] : vector<4xi64>
22     %10 = llvm.mlir.constant(2 : i64) : i64
23     %11 = llvm.insertelement %2, %9[%10 : i64] : vector<4xi64>
24     %12 = llvm.mlir.constant(3 : i64) : i64
25     %v = llvm.insertelement %3, %11[%12 : i64] : vector<4xi64>
27     %add = "llvm.intr.vector.reduce.add"(%v)
28         : (vector<4xi64>) -> i64
29     llvm.call @printI64(%add) : (i64) -> ()
30     llvm.call @printNewline() : () -> ()
31     // CHECK: 10
33     %and = "llvm.intr.vector.reduce.and"(%v)
34         : (vector<4xi64>) -> i64
35     llvm.call @printI64(%and) : (i64) -> ()
36     llvm.call @printNewline() : () -> ()
37     // CHECK: 0
39     %mul = "llvm.intr.vector.reduce.mul"(%v)
40         : (vector<4xi64>) -> i64
41     llvm.call @printI64(%mul) : (i64) -> ()
42     llvm.call @printNewline() : () -> ()
43     // CHECK: 24
45     %or = "llvm.intr.vector.reduce.or"(%v)
46         : (vector<4xi64>) -> i64
47     llvm.call @printI64(%or) : (i64) -> ()
48     llvm.call @printNewline() : () -> ()
49     // CHECK: 7
51     %smax = "llvm.intr.vector.reduce.smax"(%v)
52         : (vector<4xi64>) -> i64
53     llvm.call @printI64(%smax) : (i64) -> ()
54     llvm.call @printNewline() : () -> ()
55     // CHECK: 4
57     %smin = "llvm.intr.vector.reduce.smin"(%v)
58         : (vector<4xi64>) -> i64
59     llvm.call @printI64(%smin) : (i64) -> ()
60     llvm.call @printNewline() : () -> ()
61     // CHECK: 1
63     %umax = "llvm.intr.vector.reduce.umax"(%v)
64         : (vector<4xi64>) -> i64
65     llvm.call @printI64(%umax) : (i64) -> ()
66     llvm.call @printNewline() : () -> ()
67     // CHECK: 4
69     %umin = "llvm.intr.vector.reduce.umin"(%v)
70         : (vector<4xi64>) -> i64
71     llvm.call @printI64(%umin) : (i64) -> ()
72     llvm.call @printNewline() : () -> ()
73     // CHECK: 1
75     %xor = "llvm.intr.vector.reduce.xor"(%v)
76         : (vector<4xi64>) -> i64
77     llvm.call @printI64(%xor) : (i64) -> ()
78     llvm.call @printNewline() : () -> ()
79     // CHECK: 4
81     llvm.return
82   }