1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py 2; RUN: llc -O0 -mtriple=mipsel-linux-gnu -global-isel -mcpu=mips32r5 -mattr=+msa,+fp64,+nan2008 -verify-machineinstrs %s -o -| FileCheck %s -check-prefixes=P5600 3 4define void @fadd_v4f32(<4 x float>* %a, <4 x float>* %b, <4 x float>* %c) { 5; P5600-LABEL: fadd_v4f32: 6; P5600: # %bb.0: # %entry 7; P5600-NEXT: ld.w $w0, 0($4) 8; P5600-NEXT: ld.w $w1, 0($5) 9; P5600-NEXT: fadd.w $w0, $w0, $w1 10; P5600-NEXT: st.w $w0, 0($6) 11; P5600-NEXT: jr $ra 12; P5600-NEXT: nop 13entry: 14 %0 = load <4 x float>, <4 x float>* %a, align 16 15 %1 = load <4 x float>, <4 x float>* %b, align 16 16 %add = fadd <4 x float> %0, %1 17 store <4 x float> %add, <4 x float>* %c, align 16 18 ret void 19} 20 21 22define void @fadd_v2f64(<2 x double>* %a, <2 x double>* %b, <2 x double>* %c) { 23; P5600-LABEL: fadd_v2f64: 24; P5600: # %bb.0: # %entry 25; P5600-NEXT: ld.d $w0, 0($4) 26; P5600-NEXT: ld.d $w1, 0($5) 27; P5600-NEXT: fadd.d $w0, $w0, $w1 28; P5600-NEXT: st.d $w0, 0($6) 29; P5600-NEXT: jr $ra 30; P5600-NEXT: nop 31entry: 32 %0 = load <2 x double>, <2 x double>* %a, align 16 33 %1 = load <2 x double>, <2 x double>* %b, align 16 34 %add = fadd <2 x double> %0, %1 35 store <2 x double> %add, <2 x double>* %c, align 16 36 ret void 37} 38 39 40define void @fsub_v4f32(<4 x float>* %a, <4 x float>* %b, <4 x float>* %c) { 41; P5600-LABEL: fsub_v4f32: 42; P5600: # %bb.0: # %entry 43; P5600-NEXT: ld.w $w0, 0($4) 44; P5600-NEXT: ld.w $w1, 0($5) 45; P5600-NEXT: fsub.w $w0, $w0, $w1 46; P5600-NEXT: st.w $w0, 0($6) 47; P5600-NEXT: jr $ra 48; P5600-NEXT: nop 49entry: 50 %0 = load <4 x float>, <4 x float>* %a, align 16 51 %1 = load <4 x float>, <4 x float>* %b, align 16 52 %sub = fsub <4 x float> %0, %1 53 store <4 x float> %sub, <4 x float>* %c, align 16 54 ret void 55} 56 57 58define void @fsub_v2f64(<2 x double>* %a, <2 x double>* %b, <2 x double>* %c) { 59; P5600-LABEL: fsub_v2f64: 60; P5600: # %bb.0: # %entry 61; P5600-NEXT: ld.d $w0, 0($4) 62; P5600-NEXT: ld.d $w1, 0($5) 63; P5600-NEXT: fsub.d $w0, $w0, $w1 64; P5600-NEXT: st.d $w0, 0($6) 65; P5600-NEXT: jr $ra 66; P5600-NEXT: nop 67entry: 68 %0 = load <2 x double>, <2 x double>* %a, align 16 69 %1 = load <2 x double>, <2 x double>* %b, align 16 70 %sub = fsub <2 x double> %0, %1 71 store <2 x double> %sub, <2 x double>* %c, align 16 72 ret void 73} 74 75 76define void @fmul_v4f32(<4 x float>* %a, <4 x float>* %b, <4 x float>* %c) { 77; P5600-LABEL: fmul_v4f32: 78; P5600: # %bb.0: # %entry 79; P5600-NEXT: ld.w $w0, 0($4) 80; P5600-NEXT: ld.w $w1, 0($5) 81; P5600-NEXT: fmul.w $w0, $w0, $w1 82; P5600-NEXT: st.w $w0, 0($6) 83; P5600-NEXT: jr $ra 84; P5600-NEXT: nop 85entry: 86 %0 = load <4 x float>, <4 x float>* %a, align 16 87 %1 = load <4 x float>, <4 x float>* %b, align 16 88 %mul = fmul <4 x float> %0, %1 89 store <4 x float> %mul, <4 x float>* %c, align 16 90 ret void 91} 92 93 94define void @fmul_v2f64(<2 x double>* %a, <2 x double>* %b, <2 x double>* %c) { 95; P5600-LABEL: fmul_v2f64: 96; P5600: # %bb.0: # %entry 97; P5600-NEXT: ld.d $w0, 0($4) 98; P5600-NEXT: ld.d $w1, 0($5) 99; P5600-NEXT: fmul.d $w0, $w0, $w1 100; P5600-NEXT: st.d $w0, 0($6) 101; P5600-NEXT: jr $ra 102; P5600-NEXT: nop 103entry: 104 %0 = load <2 x double>, <2 x double>* %a, align 16 105 %1 = load <2 x double>, <2 x double>* %b, align 16 106 %mul = fmul <2 x double> %0, %1 107 store <2 x double> %mul, <2 x double>* %c, align 16 108 ret void 109} 110 111 112define void @fdiv_v4f32(<4 x float>* %a, <4 x float>* %b, <4 x float>* %c) { 113; P5600-LABEL: fdiv_v4f32: 114; P5600: # %bb.0: # %entry 115; P5600-NEXT: ld.w $w0, 0($4) 116; P5600-NEXT: ld.w $w1, 0($5) 117; P5600-NEXT: fdiv.w $w0, $w0, $w1 118; P5600-NEXT: st.w $w0, 0($6) 119; P5600-NEXT: jr $ra 120; P5600-NEXT: nop 121entry: 122 %0 = load <4 x float>, <4 x float>* %a, align 16 123 %1 = load <4 x float>, <4 x float>* %b, align 16 124 %div = fdiv <4 x float> %0, %1 125 store <4 x float> %div, <4 x float>* %c, align 16 126 ret void 127} 128 129 130define void @fdiv_v2f64(<2 x double>* %a, <2 x double>* %b, <2 x double>* %c) { 131; P5600-LABEL: fdiv_v2f64: 132; P5600: # %bb.0: # %entry 133; P5600-NEXT: ld.d $w0, 0($4) 134; P5600-NEXT: ld.d $w1, 0($5) 135; P5600-NEXT: fdiv.d $w0, $w0, $w1 136; P5600-NEXT: st.d $w0, 0($6) 137; P5600-NEXT: jr $ra 138; P5600-NEXT: nop 139entry: 140 %0 = load <2 x double>, <2 x double>* %a, align 16 141 %1 = load <2 x double>, <2 x double>* %b, align 16 142 %div = fdiv <2 x double> %0, %1 143 store <2 x double> %div, <2 x double>* %c, align 16 144 ret void 145} 146