1 # NOTE: Assertions have been autogenerated by utils/update_mir_test_checks.py
2 # RUN: llc -mtriple=mipsel-linux-gnu -mcpu=mips32r5 -mattr=+msa,+fp64,+nan2008 -run-pass=legalizer -verify-machineinstrs %s -o - | FileCheck %s -check-prefixes=P5600
5 define void @mul_v16i8(ptr %a, ptr %b, ptr %c) { entry: ret void }
6 define void @mul_v8i16(ptr %a, ptr %b, ptr %c) { entry: ret void }
7 define void @mul_v4i32(ptr %a, ptr %b, ptr %c) { entry: ret void }
8 define void @mul_v2i64(ptr %a, ptr %b, ptr %c) { entry: ret void }
14 tracksRegLiveness: true
17 liveins: $a0, $a1, $a2
19 ; P5600-LABEL: name: mul_v16i8
20 ; P5600: liveins: $a0, $a1, $a2
21 ; P5600: [[COPY:%[0-9]+]]:_(p0) = COPY $a0
22 ; P5600: [[COPY1:%[0-9]+]]:_(p0) = COPY $a1
23 ; P5600: [[COPY2:%[0-9]+]]:_(p0) = COPY $a2
24 ; P5600: [[LOAD:%[0-9]+]]:_(<16 x s8>) = G_LOAD [[COPY]](p0) :: (load (<16 x s8>) from %ir.a)
25 ; P5600: [[LOAD1:%[0-9]+]]:_(<16 x s8>) = G_LOAD [[COPY1]](p0) :: (load (<16 x s8>) from %ir.b)
26 ; P5600: [[MUL:%[0-9]+]]:_(<16 x s8>) = G_MUL [[LOAD1]], [[LOAD]]
27 ; P5600: G_STORE [[MUL]](<16 x s8>), [[COPY2]](p0) :: (store (<16 x s8>) into %ir.c)
32 %3:_(<16 x s8>) = G_LOAD %0(p0) :: (load (<16 x s8>) from %ir.a)
33 %4:_(<16 x s8>) = G_LOAD %1(p0) :: (load (<16 x s8>) from %ir.b)
34 %5:_(<16 x s8>) = G_MUL %4, %3
35 G_STORE %5(<16 x s8>), %2(p0) :: (store (<16 x s8>) into %ir.c)
42 tracksRegLiveness: true
45 liveins: $a0, $a1, $a2
47 ; P5600-LABEL: name: mul_v8i16
48 ; P5600: liveins: $a0, $a1, $a2
49 ; P5600: [[COPY:%[0-9]+]]:_(p0) = COPY $a0
50 ; P5600: [[COPY1:%[0-9]+]]:_(p0) = COPY $a1
51 ; P5600: [[COPY2:%[0-9]+]]:_(p0) = COPY $a2
52 ; P5600: [[LOAD:%[0-9]+]]:_(<8 x s16>) = G_LOAD [[COPY]](p0) :: (load (<8 x s16>) from %ir.a)
53 ; P5600: [[LOAD1:%[0-9]+]]:_(<8 x s16>) = G_LOAD [[COPY1]](p0) :: (load (<8 x s16>) from %ir.b)
54 ; P5600: [[MUL:%[0-9]+]]:_(<8 x s16>) = G_MUL [[LOAD1]], [[LOAD]]
55 ; P5600: G_STORE [[MUL]](<8 x s16>), [[COPY2]](p0) :: (store (<8 x s16>) into %ir.c)
60 %3:_(<8 x s16>) = G_LOAD %0(p0) :: (load (<8 x s16>) from %ir.a)
61 %4:_(<8 x s16>) = G_LOAD %1(p0) :: (load (<8 x s16>) from %ir.b)
62 %5:_(<8 x s16>) = G_MUL %4, %3
63 G_STORE %5(<8 x s16>), %2(p0) :: (store (<8 x s16>) into %ir.c)
70 tracksRegLiveness: true
73 liveins: $a0, $a1, $a2
75 ; P5600-LABEL: name: mul_v4i32
76 ; P5600: liveins: $a0, $a1, $a2
77 ; P5600: [[COPY:%[0-9]+]]:_(p0) = COPY $a0
78 ; P5600: [[COPY1:%[0-9]+]]:_(p0) = COPY $a1
79 ; P5600: [[COPY2:%[0-9]+]]:_(p0) = COPY $a2
80 ; P5600: [[LOAD:%[0-9]+]]:_(<4 x s32>) = G_LOAD [[COPY]](p0) :: (load (<4 x s32>) from %ir.a)
81 ; P5600: [[LOAD1:%[0-9]+]]:_(<4 x s32>) = G_LOAD [[COPY1]](p0) :: (load (<4 x s32>) from %ir.b)
82 ; P5600: [[MUL:%[0-9]+]]:_(<4 x s32>) = G_MUL [[LOAD1]], [[LOAD]]
83 ; P5600: G_STORE [[MUL]](<4 x s32>), [[COPY2]](p0) :: (store (<4 x s32>) into %ir.c)
88 %3:_(<4 x s32>) = G_LOAD %0(p0) :: (load (<4 x s32>) from %ir.a)
89 %4:_(<4 x s32>) = G_LOAD %1(p0) :: (load (<4 x s32>) from %ir.b)
90 %5:_(<4 x s32>) = G_MUL %4, %3
91 G_STORE %5(<4 x s32>), %2(p0) :: (store (<4 x s32>) into %ir.c)
98 tracksRegLiveness: true
101 liveins: $a0, $a1, $a2
103 ; P5600-LABEL: name: mul_v2i64
104 ; P5600: liveins: $a0, $a1, $a2
105 ; P5600: [[COPY:%[0-9]+]]:_(p0) = COPY $a0
106 ; P5600: [[COPY1:%[0-9]+]]:_(p0) = COPY $a1
107 ; P5600: [[COPY2:%[0-9]+]]:_(p0) = COPY $a2
108 ; P5600: [[LOAD:%[0-9]+]]:_(<2 x s64>) = G_LOAD [[COPY]](p0) :: (load (<2 x s64>) from %ir.a)
109 ; P5600: [[LOAD1:%[0-9]+]]:_(<2 x s64>) = G_LOAD [[COPY1]](p0) :: (load (<2 x s64>) from %ir.b)
110 ; P5600: [[MUL:%[0-9]+]]:_(<2 x s64>) = G_MUL [[LOAD1]], [[LOAD]]
111 ; P5600: G_STORE [[MUL]](<2 x s64>), [[COPY2]](p0) :: (store (<2 x s64>) into %ir.c)
116 %3:_(<2 x s64>) = G_LOAD %0(p0) :: (load (<2 x s64>) from %ir.a)
117 %4:_(<2 x s64>) = G_LOAD %1(p0) :: (load (<2 x s64>) from %ir.b)
118 %5:_(<2 x s64>) = G_MUL %4, %3
119 G_STORE %5(<2 x s64>), %2(p0) :: (store (<2 x s64>) into %ir.c)