Run DCE after a LoopFlatten test to reduce spurious output [nfc]
[llvm-project.git] / clang / test / CodeGen / fp-matrix-pragma.c
blob45ad6e657daf171943db8f778eb118ab7b3f369a
1 // RUN: %clang -emit-llvm -S -fenable-matrix -mllvm -disable-llvm-optzns %s -o - | FileCheck %s
3 typedef float fx2x2_t __attribute__((matrix_type(2, 2)));
4 typedef int ix2x2_t __attribute__((matrix_type(2, 2)));
6 fx2x2_t fp_matrix_contract(fx2x2_t a, fx2x2_t b, float c, float d) {
7 // CHECK: call contract <4 x float> @llvm.matrix.multiply.v4f32.v4f32.v4f32
8 // CHECK: fdiv contract <4 x float>
9 // CHECK: fmul contract <4 x float>
10 #pragma clang fp contract(fast)
11 return (a * b / c) * d;
14 fx2x2_t fp_matrix_reassoc(fx2x2_t a, fx2x2_t b, fx2x2_t c) {
15 // CHECK: fadd reassoc <4 x float>
16 // CHECK: fsub reassoc <4 x float>
17 #pragma clang fp reassociate(on)
18 return a + b - c;
21 fx2x2_t fp_matrix_ops(fx2x2_t a, fx2x2_t b, fx2x2_t c) {
22 // CHECK: call reassoc contract <4 x float> @llvm.matrix.multiply.v4f32.v4f32.v4f32
23 // CHECK: fadd reassoc contract <4 x float>
24 #pragma clang fp contract(fast) reassociate(on)
25 return a * b + c;
28 fx2x2_t fp_matrix_compound_ops(fx2x2_t a, fx2x2_t b, fx2x2_t c, fx2x2_t d,
29 float e, float f) {
30 // CHECK: call reassoc contract <4 x float> @llvm.matrix.multiply.v4f32.v4f32.v4f32
31 // CHECK: fadd reassoc contract <4 x float>
32 // CHECK: fsub reassoc contract <4 x float>
33 // CHECK: fmul reassoc contract <4 x float>
34 // CHECK: fdiv reassoc contract <4 x float>
35 #pragma clang fp contract(fast) reassociate(on)
36 a *= b;
37 a += c;
38 a -= d;
39 a *= e;
40 a /= f;
42 return a;
45 ix2x2_t int_matrix_ops(ix2x2_t a, ix2x2_t b, ix2x2_t c) {
46 // CHECK: call <4 x i32> @llvm.matrix.multiply.v4i32.v4i32.v4i32
47 // CHECK: add <4 x i32>
48 #pragma clang fp contract(fast) reassociate(on)
49 return a * b + c;