Daniel Sanders | b282f1f | 2014-04-09 09:56:43 +0000 | [diff] [blame] | 1 | ; Check that madd.[ds], msub.[ds], nmadd.[ds], and nmsub.[ds] are supported |
| 2 | ; correctly. |
| 3 | ; The spec for nmadd.[ds], and nmsub.[ds] does not state that they obey the |
| 4 | ; the Has2008 and ABS2008 configuration bits which govern the conformance to |
| 5 | ; IEEE 754 (1985) and IEEE 754 (2008). These instructions are therefore only |
| 6 | ; available when -enable-no-nans-fp-math is given. |
| 7 | |
Petar Jovanovic | 64fb7a8 | 2017-06-06 15:33:01 +0000 | [diff] [blame] | 8 | ; RUN: llc < %s -march=mipsel -mcpu=mips32 -enable-no-nans-fp-math | FileCheck %s -check-prefixes=ALL,32-NOMADD,32-NONAN-NOMADD |
Daniel Sanders | 0d97270 | 2016-06-24 12:23:17 +0000 | [diff] [blame] | 9 | ; RUN: llc < %s -march=mipsel -mcpu=mips32r2 -enable-no-nans-fp-math | FileCheck %s -check-prefixes=ALL,32R2,32R2-NONAN |
Petar Jovanovic | 64fb7a8 | 2017-06-06 15:33:01 +0000 | [diff] [blame] | 10 | ; RUN: llc < %s -march=mipsel -mcpu=mips32r6 -enable-no-nans-fp-math | FileCheck %s -check-prefixes=ALL,32R6-NOMADD,32R6-NONAN-NOMADD |
Daniel Sanders | 0d97270 | 2016-06-24 12:23:17 +0000 | [diff] [blame] | 11 | ; RUN: llc < %s -march=mips64el -mcpu=mips64 -target-abi=n64 -enable-no-nans-fp-math | FileCheck %s -check-prefixes=ALL,64,64-NONAN |
| 12 | ; RUN: llc < %s -march=mips64el -mcpu=mips64r2 -target-abi=n64 -enable-no-nans-fp-math | FileCheck %s -check-prefixes=ALL,64R2,64R2-NONAN |
Petar Jovanovic | 64fb7a8 | 2017-06-06 15:33:01 +0000 | [diff] [blame] | 13 | ; RUN: llc < %s -march=mips64el -mcpu=mips64r6 -target-abi=n64 -enable-no-nans-fp-math | FileCheck %s -check-prefixes=ALL,64R6-NOMADD,64R6-NONAN-NOMADD |
| 14 | ; RUN: llc < %s -march=mipsel -mcpu=mips32 | FileCheck %s -check-prefixes=ALL,32-NOMADD,32-NAN-NOMADD |
Daniel Sanders | 0d97270 | 2016-06-24 12:23:17 +0000 | [diff] [blame] | 15 | ; RUN: llc < %s -march=mipsel -mcpu=mips32r2 | FileCheck %s -check-prefixes=ALL,32R2,32R2-NAN |
Petar Jovanovic | 64fb7a8 | 2017-06-06 15:33:01 +0000 | [diff] [blame] | 16 | ; RUN: llc < %s -march=mipsel -mcpu=mips32r6 | FileCheck %s -check-prefixes=ALL,32R6-NOMADD,32R6-NAN-NOMADD |
Daniel Sanders | 0d97270 | 2016-06-24 12:23:17 +0000 | [diff] [blame] | 17 | ; RUN: llc < %s -march=mips64el -mcpu=mips64 -target-abi=n64 | FileCheck %s -check-prefixes=ALL,64,64-NAN |
| 18 | ; RUN: llc < %s -march=mips64el -mcpu=mips64r2 -target-abi=n64 | FileCheck %s -check-prefixes=ALL,64R2,64R2-NAN |
Petar Jovanovic | 64fb7a8 | 2017-06-06 15:33:01 +0000 | [diff] [blame] | 19 | ; RUN: llc < %s -march=mips64el -mcpu=mips64r6 -target-abi=n64 | FileCheck %s -check-prefixes=ALL,64R6-NOMADD,64R6-NAN-NOMADD |
| 20 | |
| 21 | ; Check that madd.[ds], msub.[ds], nmadd.[ds], and nmsub.[ds] are not generated |
| 22 | ; when +nomadd attribute is specified. |
| 23 | ; Output for mips32 and mips64r6 reused since aforementioned instructions are |
| 24 | ; not generated in those cases. |
| 25 | ; RUN: llc < %s -march=mipsel -mcpu=mips32r2 -enable-no-nans-fp-math -mattr=+nomadd4 | FileCheck %s -check-prefixes=ALL,32-NOMADD,32-NONAN-NOMADD |
| 26 | ; RUN: llc < %s -march=mips64el -mcpu=mips64 -target-abi=n64 -enable-no-nans-fp-math -mattr=+nomadd4 | FileCheck %s -check-prefixes=ALL,64R6-NOMADD,64R6-NONAN-NOMADD |
| 27 | ; RUN: llc < %s -march=mips64el -mcpu=mips64r2 -target-abi=n64 -enable-no-nans-fp-math -mattr=+nomadd4 | FileCheck %s -check-prefixes=ALL,64R6-NOMADD,64R6-NONAN-NOMADD |
| 28 | ; RUN: llc < %s -march=mipsel -mcpu=mips32r2 -mattr=+nomadd4 | FileCheck %s -check-prefixes=ALL,32-NOMADD,32-NAN-NOMADD |
| 29 | ; RUN: llc < %s -march=mips64el -mcpu=mips64 -target-abi=n64 -mattr=+nomadd4 | FileCheck %s -check-prefixes=ALL,64R6-NOMADD,64R6-NAN-NOMADD |
| 30 | ; RUN: llc < %s -march=mips64el -mcpu=mips64r2 -target-abi=n64 -mattr=+nomadd4 | FileCheck %s -check-prefixes=ALL,64R6-NOMADD,64R6-NAN-NOMADD |
Akira Hatanaka | 60f7a8e | 2012-02-25 00:21:52 +0000 | [diff] [blame] | 31 | |
| 32 | define float @FOO0float(float %a, float %b, float %c) nounwind readnone { |
| 33 | entry: |
Daniel Sanders | ded02af | 2014-06-12 11:04:18 +0000 | [diff] [blame] | 34 | ; ALL-LABEL: FOO0float: |
| 35 | |
Petar Jovanovic | 64fb7a8 | 2017-06-06 15:33:01 +0000 | [diff] [blame] | 36 | ; 32-NOMADD-DAG: mtc1 $6, $[[T0:f[0-9]+]] |
| 37 | ; 32-NOMADD-DAG: mul.s $[[T1:f[0-9]+]], $f12, $f14 |
| 38 | ; 32-NOMADD-DAG: add.s $[[T2:f[0-9]+]], $[[T1]], $[[T0]] |
| 39 | ; 32-NOMADD-DAG: mtc1 $zero, $[[T2:f[0-9]+]] |
| 40 | ; 32-NOMADD-DAG: add.s $f0, $[[T1]], $[[T2]] |
Daniel Sanders | ded02af | 2014-06-12 11:04:18 +0000 | [diff] [blame] | 41 | |
Petar Jovanovic | 64fb7a8 | 2017-06-06 15:33:01 +0000 | [diff] [blame] | 42 | ; 32R2: mtc1 $6, $[[T0:f[0-9]+]] |
| 43 | ; 32R2: madd.s $[[T1:f[0-9]+]], $[[T0]], $f12, $f14 |
| 44 | ; 32R2: mtc1 $zero, $[[T2:f[0-9]+]] |
| 45 | ; 32R2: add.s $f0, $[[T1]], $[[T2]] |
Daniel Sanders | ded02af | 2014-06-12 11:04:18 +0000 | [diff] [blame] | 46 | |
Petar Jovanovic | 64fb7a8 | 2017-06-06 15:33:01 +0000 | [diff] [blame] | 47 | ; 32R6-NOMADD-DAG: mtc1 $6, $[[T0:f[0-9]+]] |
| 48 | ; 32R6-NOMADD-DAG: mul.s $[[T1:f[0-9]+]], $f12, $f14 |
| 49 | ; 32R6-NOMADD-DAG: add.s $[[T2:f[0-9]+]], $[[T1]], $[[T0]] |
| 50 | ; 32R6-NOMADD-DAG: mtc1 $zero, $[[T2:f[0-9]+]] |
| 51 | ; 32R6-NOMADD-DAG: add.s $f0, $[[T1]], $[[T2]] |
Daniel Sanders | ded02af | 2014-06-12 11:04:18 +0000 | [diff] [blame] | 52 | |
Petar Jovanovic | 64fb7a8 | 2017-06-06 15:33:01 +0000 | [diff] [blame] | 53 | ; 64-DAG: madd.s $[[T0:f[0-9]+]], $f14, $f12, $f13 |
| 54 | ; 64-DAG: mtc1 $zero, $[[T1:f[0-9]+]] |
| 55 | ; 64-DAG: add.s $f0, $[[T0]], $[[T1]] |
Daniel Sanders | ded02af | 2014-06-12 11:04:18 +0000 | [diff] [blame] | 56 | |
Petar Jovanovic | 64fb7a8 | 2017-06-06 15:33:01 +0000 | [diff] [blame] | 57 | ; 64R2: madd.s $[[T0:f[0-9]+]], $f14, $f12, $f13 |
| 58 | ; 64R2: mtc1 $zero, $[[T1:f[0-9]+]] |
| 59 | ; 64R2: add.s $f0, $[[T0]], $[[T1]] |
Daniel Sanders | ded02af | 2014-06-12 11:04:18 +0000 | [diff] [blame] | 60 | |
Petar Jovanovic | 64fb7a8 | 2017-06-06 15:33:01 +0000 | [diff] [blame] | 61 | ; 64R6-NOMADD-DAG: mul.s $[[T0:f[0-9]+]], $f12, $f13 |
| 62 | ; 64R6-NOMADD-DAG: add.s $[[T1:f[0-9]+]], $[[T0]], $f14 |
| 63 | ; 64R6-NOMADD-DAG: mtc1 $zero, $[[T2:f[0-9]+]] |
| 64 | ; 64R6-NOMADD-DAG: add.s $f0, $[[T1]], $[[T2]] |
Daniel Sanders | ded02af | 2014-06-12 11:04:18 +0000 | [diff] [blame] | 65 | |
Akira Hatanaka | 60f7a8e | 2012-02-25 00:21:52 +0000 | [diff] [blame] | 66 | %mul = fmul float %a, %b |
| 67 | %add = fadd float %mul, %c |
| 68 | %add1 = fadd float %add, 0.000000e+00 |
| 69 | ret float %add1 |
| 70 | } |
| 71 | |
| 72 | define float @FOO1float(float %a, float %b, float %c) nounwind readnone { |
| 73 | entry: |
Daniel Sanders | ded02af | 2014-06-12 11:04:18 +0000 | [diff] [blame] | 74 | ; ALL-LABEL: FOO1float: |
| 75 | |
Petar Jovanovic | 64fb7a8 | 2017-06-06 15:33:01 +0000 | [diff] [blame] | 76 | ; 32-NOMADD-DAG: mtc1 $6, $[[T0:f[0-9]+]] |
| 77 | ; 32-NOMADD-DAG: mul.s $[[T1:f[0-9]+]], $f12, $f14 |
| 78 | ; 32-NOMADD-DAG: sub.s $[[T2:f[0-9]+]], $[[T1]], $[[T0]] |
| 79 | ; 32-NOMADD-DAG: mtc1 $zero, $[[T2:f[0-9]+]] |
| 80 | ; 32-NOMADD-DAG: add.s $f0, $[[T1]], $[[T2]] |
Daniel Sanders | ded02af | 2014-06-12 11:04:18 +0000 | [diff] [blame] | 81 | |
Petar Jovanovic | 64fb7a8 | 2017-06-06 15:33:01 +0000 | [diff] [blame] | 82 | ; 32R2: mtc1 $6, $[[T0:f[0-9]+]] |
| 83 | ; 32R2: msub.s $[[T1:f[0-9]+]], $[[T0]], $f12, $f14 |
| 84 | ; 32R2: mtc1 $zero, $[[T2:f[0-9]+]] |
| 85 | ; 32R2: add.s $f0, $[[T1]], $[[T2]] |
Daniel Sanders | ded02af | 2014-06-12 11:04:18 +0000 | [diff] [blame] | 86 | |
Petar Jovanovic | 64fb7a8 | 2017-06-06 15:33:01 +0000 | [diff] [blame] | 87 | ; 32R6-NOMADD-DAG: mtc1 $6, $[[T0:f[0-9]+]] |
| 88 | ; 32R6-NOMADD-DAG: mul.s $[[T1:f[0-9]+]], $f12, $f14 |
| 89 | ; 32R6-NOMADD-DAG: sub.s $[[T2:f[0-9]+]], $[[T1]], $[[T0]] |
| 90 | ; 32R6-NOMADD-DAG: mtc1 $zero, $[[T2:f[0-9]+]] |
| 91 | ; 32R6-NOMADD-DAG: add.s $f0, $[[T1]], $[[T2]] |
Daniel Sanders | ded02af | 2014-06-12 11:04:18 +0000 | [diff] [blame] | 92 | |
Petar Jovanovic | 64fb7a8 | 2017-06-06 15:33:01 +0000 | [diff] [blame] | 93 | ; 64-DAG: msub.s $[[T0:f[0-9]+]], $f14, $f12, $f13 |
| 94 | ; 64-DAG: mtc1 $zero, $[[T1:f[0-9]+]] |
| 95 | ; 64-DAG: add.s $f0, $[[T0]], $[[T1]] |
Daniel Sanders | ded02af | 2014-06-12 11:04:18 +0000 | [diff] [blame] | 96 | |
Petar Jovanovic | 64fb7a8 | 2017-06-06 15:33:01 +0000 | [diff] [blame] | 97 | ; 64R2: msub.s $[[T0:f[0-9]+]], $f14, $f12, $f13 |
| 98 | ; 64R2: mtc1 $zero, $[[T1:f[0-9]+]] |
| 99 | ; 64R2: add.s $f0, $[[T0]], $[[T1]] |
Daniel Sanders | ded02af | 2014-06-12 11:04:18 +0000 | [diff] [blame] | 100 | |
Petar Jovanovic | 64fb7a8 | 2017-06-06 15:33:01 +0000 | [diff] [blame] | 101 | ; 64R6-NOMADD-DAG: mul.s $[[T0:f[0-9]+]], $f12, $f13 |
| 102 | ; 64R6-NOMADD-DAG: sub.s $[[T1:f[0-9]+]], $[[T0]], $f14 |
| 103 | ; 64R6-NOMADD-DAG: mtc1 $zero, $[[T2:f[0-9]+]] |
| 104 | ; 64R6-NOMADD-DAG: add.s $f0, $[[T1]], $[[T2]] |
Daniel Sanders | ded02af | 2014-06-12 11:04:18 +0000 | [diff] [blame] | 105 | |
Akira Hatanaka | 60f7a8e | 2012-02-25 00:21:52 +0000 | [diff] [blame] | 106 | %mul = fmul float %a, %b |
| 107 | %sub = fsub float %mul, %c |
| 108 | %add = fadd float %sub, 0.000000e+00 |
| 109 | ret float %add |
| 110 | } |
| 111 | |
| 112 | define float @FOO2float(float %a, float %b, float %c) nounwind readnone { |
| 113 | entry: |
Daniel Sanders | ded02af | 2014-06-12 11:04:18 +0000 | [diff] [blame] | 114 | ; ALL-LABEL: FOO2float: |
| 115 | |
Petar Jovanovic | 64fb7a8 | 2017-06-06 15:33:01 +0000 | [diff] [blame] | 116 | ; 32-NOMADD-DAG: mtc1 $6, $[[T0:f[0-9]+]] |
| 117 | ; 32-NOMADD-DAG: mul.s $[[T1:f[0-9]+]], $f12, $f14 |
| 118 | ; 32-NOMADD-DAG: add.s $[[T2:f[0-9]+]], $[[T1]], $[[T0]] |
| 119 | ; 32-NOMADD-DAG: mtc1 $zero, $[[T2:f[0-9]+]] |
| 120 | ; 32-NOMADD-DAG: sub.s $f0, $[[T2]], $[[T1]] |
Daniel Sanders | ded02af | 2014-06-12 11:04:18 +0000 | [diff] [blame] | 121 | |
Petar Jovanovic | 64fb7a8 | 2017-06-06 15:33:01 +0000 | [diff] [blame] | 122 | ; 32R2-NONAN: mtc1 $6, $[[T0:f[0-9]+]] |
| 123 | ; 32R2-NONAN: nmadd.s $f0, $[[T0]], $f12, $f14 |
Daniel Sanders | ded02af | 2014-06-12 11:04:18 +0000 | [diff] [blame] | 124 | |
Petar Jovanovic | 64fb7a8 | 2017-06-06 15:33:01 +0000 | [diff] [blame] | 125 | ; 32R2-NAN: mtc1 $6, $[[T0:f[0-9]+]] |
| 126 | ; 32R2-NAN: madd.s $[[T1:f[0-9]+]], $[[T0]], $f12, $f14 |
| 127 | ; 32R2-NAN: mtc1 $zero, $[[T2:f[0-9]+]] |
| 128 | ; 32R2-NAN: sub.s $f0, $[[T2]], $[[T1]] |
Daniel Sanders | ded02af | 2014-06-12 11:04:18 +0000 | [diff] [blame] | 129 | |
Petar Jovanovic | 64fb7a8 | 2017-06-06 15:33:01 +0000 | [diff] [blame] | 130 | ; 32R6-NOMADD-DAG: mtc1 $6, $[[T0:f[0-9]+]] |
| 131 | ; 32R6-NOMADD-DAG: mul.s $[[T1:f[0-9]+]], $f12, $f14 |
| 132 | ; 32R6-NOMADD-DAG: add.s $[[T2:f[0-9]+]], $[[T1]], $[[T0]] |
| 133 | ; 32R6-NOMADD-DAG: mtc1 $zero, $[[T2:f[0-9]+]] |
| 134 | ; 32R6-NOMADD-DAG: sub.s $f0, $[[T2]], $[[T1]] |
Daniel Sanders | ded02af | 2014-06-12 11:04:18 +0000 | [diff] [blame] | 135 | |
Petar Jovanovic | 64fb7a8 | 2017-06-06 15:33:01 +0000 | [diff] [blame] | 136 | ; 64-NONAN: nmadd.s $f0, $f14, $f12, $f13 |
Vladimir Medic | bcb7467 | 2015-02-25 15:24:37 +0000 | [diff] [blame] | 137 | |
Petar Jovanovic | 64fb7a8 | 2017-06-06 15:33:01 +0000 | [diff] [blame] | 138 | ; 64-NAN: madd.s $[[T0:f[0-9]+]], $f14, $f12, $f13 |
| 139 | ; 64-NAN: mtc1 $zero, $[[T1:f[0-9]+]] |
| 140 | ; 64-NAN: sub.s $f0, $[[T1]], $[[T0]] |
Daniel Sanders | ded02af | 2014-06-12 11:04:18 +0000 | [diff] [blame] | 141 | |
Petar Jovanovic | 64fb7a8 | 2017-06-06 15:33:01 +0000 | [diff] [blame] | 142 | ; 64R2-NONAN: nmadd.s $f0, $f14, $f12, $f13 |
Daniel Sanders | ded02af | 2014-06-12 11:04:18 +0000 | [diff] [blame] | 143 | |
Petar Jovanovic | 64fb7a8 | 2017-06-06 15:33:01 +0000 | [diff] [blame] | 144 | ; 64R2-NAN: madd.s $[[T0:f[0-9]+]], $f14, $f12, $f13 |
| 145 | ; 64R2-NAN: mtc1 $zero, $[[T1:f[0-9]+]] |
| 146 | ; 64R2-NAN: sub.s $f0, $[[T1]], $[[T0]] |
Daniel Sanders | ded02af | 2014-06-12 11:04:18 +0000 | [diff] [blame] | 147 | |
Petar Jovanovic | 64fb7a8 | 2017-06-06 15:33:01 +0000 | [diff] [blame] | 148 | ; 64R6-NOMADD-DAG: mul.s $[[T1:f[0-9]+]], $f12, $f13 |
| 149 | ; 64R6-NOMADD-DAG: add.s $[[T2:f[0-9]+]], $[[T1]], $f14 |
| 150 | ; 64R6-NOMADD-DAG: mtc1 $zero, $[[T2:f[0-9]+]] |
| 151 | ; 64R6-NOMADD-DAG: sub.s $f0, $[[T2]], $[[T1]] |
Daniel Sanders | ded02af | 2014-06-12 11:04:18 +0000 | [diff] [blame] | 152 | |
Akira Hatanaka | 60f7a8e | 2012-02-25 00:21:52 +0000 | [diff] [blame] | 153 | %mul = fmul float %a, %b |
| 154 | %add = fadd float %mul, %c |
| 155 | %sub = fsub float 0.000000e+00, %add |
| 156 | ret float %sub |
| 157 | } |
| 158 | |
| 159 | define float @FOO3float(float %a, float %b, float %c) nounwind readnone { |
| 160 | entry: |
Daniel Sanders | ded02af | 2014-06-12 11:04:18 +0000 | [diff] [blame] | 161 | ; ALL-LABEL: FOO3float: |
| 162 | |
Petar Jovanovic | 64fb7a8 | 2017-06-06 15:33:01 +0000 | [diff] [blame] | 163 | ; 32-NOMADD-DAG: mtc1 $6, $[[T0:f[0-9]+]] |
| 164 | ; 32-NOMADD-DAG: mul.s $[[T1:f[0-9]+]], $f12, $f14 |
| 165 | ; 32-NOMADD-DAG: sub.s $[[T2:f[0-9]+]], $[[T1]], $[[T0]] |
| 166 | ; 32-NOMADD-DAG: mtc1 $zero, $[[T2:f[0-9]+]] |
| 167 | ; 32-NOMADD-DAG: sub.s $f0, $[[T2]], $[[T1]] |
Daniel Sanders | ded02af | 2014-06-12 11:04:18 +0000 | [diff] [blame] | 168 | |
Petar Jovanovic | 64fb7a8 | 2017-06-06 15:33:01 +0000 | [diff] [blame] | 169 | ; 32R2-NONAN: mtc1 $6, $[[T0:f[0-9]+]] |
| 170 | ; 32R2-NONAN: nmsub.s $f0, $[[T0]], $f12, $f14 |
Daniel Sanders | ded02af | 2014-06-12 11:04:18 +0000 | [diff] [blame] | 171 | |
Petar Jovanovic | 64fb7a8 | 2017-06-06 15:33:01 +0000 | [diff] [blame] | 172 | ; 32R2-NAN: mtc1 $6, $[[T0:f[0-9]+]] |
| 173 | ; 32R2-NAN: msub.s $[[T1:f[0-9]+]], $[[T0]], $f12, $f14 |
| 174 | ; 32R2-NAN: mtc1 $zero, $[[T2:f[0-9]+]] |
| 175 | ; 32R2-NAN: sub.s $f0, $[[T2]], $[[T1]] |
Daniel Sanders | ded02af | 2014-06-12 11:04:18 +0000 | [diff] [blame] | 176 | |
Petar Jovanovic | 64fb7a8 | 2017-06-06 15:33:01 +0000 | [diff] [blame] | 177 | ; 64-NAN: msub.s $[[T0:f[0-9]+]], $f14, $f12, $f13 |
| 178 | ; 64-NAN: mtc1 $zero, $[[T1:f[0-9]+]] |
| 179 | ; 64-NAN: sub.s $f0, $[[T1]], $[[T0]] |
Vladimir Medic | bcb7467 | 2015-02-25 15:24:37 +0000 | [diff] [blame] | 180 | |
Petar Jovanovic | 64fb7a8 | 2017-06-06 15:33:01 +0000 | [diff] [blame] | 181 | ; 64-NONAN: nmsub.s $f0, $f14, $f12, $f13 |
Daniel Sanders | ded02af | 2014-06-12 11:04:18 +0000 | [diff] [blame] | 182 | |
Petar Jovanovic | 64fb7a8 | 2017-06-06 15:33:01 +0000 | [diff] [blame] | 183 | ; 64R2-NAN: msub.s $[[T0:f[0-9]+]], $f14, $f12, $f13 |
| 184 | ; 64R2-NAN: mtc1 $zero, $[[T1:f[0-9]+]] |
| 185 | ; 64R2-NAN: sub.s $f0, $[[T1]], $[[T0]] |
Daniel Sanders | ded02af | 2014-06-12 11:04:18 +0000 | [diff] [blame] | 186 | |
Petar Jovanovic | 64fb7a8 | 2017-06-06 15:33:01 +0000 | [diff] [blame] | 187 | ; 64R6-NOMADD-DAG: mul.s $[[T1:f[0-9]+]], $f12, $f13 |
| 188 | ; 64R6-NOMADD-DAG: sub.s $[[T2:f[0-9]+]], $[[T1]], $f14 |
| 189 | ; 64R6-NOMADD-DAG: mtc1 $zero, $[[T2:f[0-9]+]] |
| 190 | ; 64R6-NOMADD-DAG: sub.s $f0, $[[T2]], $[[T1]] |
Daniel Sanders | ded02af | 2014-06-12 11:04:18 +0000 | [diff] [blame] | 191 | |
Akira Hatanaka | 60f7a8e | 2012-02-25 00:21:52 +0000 | [diff] [blame] | 192 | %mul = fmul float %a, %b |
| 193 | %sub = fsub float %mul, %c |
| 194 | %sub1 = fsub float 0.000000e+00, %sub |
| 195 | ret float %sub1 |
| 196 | } |
| 197 | |
| 198 | define double @FOO10double(double %a, double %b, double %c) nounwind readnone { |
| 199 | entry: |
Daniel Sanders | ded02af | 2014-06-12 11:04:18 +0000 | [diff] [blame] | 200 | ; ALL-LABEL: FOO10double: |
| 201 | |
Petar Jovanovic | 64fb7a8 | 2017-06-06 15:33:01 +0000 | [diff] [blame] | 202 | ; 32-NOMADD-DAG: ldc1 $[[T0:f[0-9]+]], 16($sp) |
| 203 | ; 32-NOMADD-DAG: mul.d $[[T1:f[0-9]+]], $f12, $f14 |
| 204 | ; 32-NOMADD-DAG: add.d $[[T2:f[0-9]+]], $[[T1]], $[[T0]] |
| 205 | ; 32-NOMADD-DAG: mtc1 $zero, $[[T2:f[0-9]+]] |
| 206 | ; 32-NOMADD-DAG: add.d $f0, $[[T1]], $[[T2]] |
Daniel Sanders | ded02af | 2014-06-12 11:04:18 +0000 | [diff] [blame] | 207 | |
Petar Jovanovic | 64fb7a8 | 2017-06-06 15:33:01 +0000 | [diff] [blame] | 208 | ; 32R2: ldc1 $[[T0:f[0-9]+]], 16($sp) |
| 209 | ; 32R2: madd.d $[[T1:f[0-9]+]], $[[T0]], $f12, $f14 |
| 210 | ; 32R2: mtc1 $zero, $[[T2:f[0-9]+]] |
| 211 | ; 32R2: mthc1 $zero, $[[T2]] |
| 212 | ; 32R2: add.d $f0, $[[T1]], $[[T2]] |
Daniel Sanders | ded02af | 2014-06-12 11:04:18 +0000 | [diff] [blame] | 213 | |
Petar Jovanovic | 64fb7a8 | 2017-06-06 15:33:01 +0000 | [diff] [blame] | 214 | ; 32R6-NOMADD-DAG: ldc1 $[[T0:f[0-9]+]], 16($sp) |
| 215 | ; 32R6-NOMADD-DAG: mul.d $[[T1:f[0-9]+]], $f12, $f14 |
| 216 | ; 32R6-NOMADD-DAG: add.d $[[T2:f[0-9]+]], $[[T1]], $[[T0]] |
| 217 | ; 32R6-NOMADD-DAG: mtc1 $zero, $[[T2:f[0-9]+]] |
| 218 | ; 32R6-NOMADD-DAG: add.d $f0, $[[T1]], $[[T2]] |
Daniel Sanders | ded02af | 2014-06-12 11:04:18 +0000 | [diff] [blame] | 219 | |
Petar Jovanovic | 64fb7a8 | 2017-06-06 15:33:01 +0000 | [diff] [blame] | 220 | ; 64-DAG: madd.d $[[T0:f[0-9]+]], $f14, $f12, $f13 |
| 221 | ; 64-DAG: mtc1 $zero, $[[T1:f[0-9]+]] |
| 222 | ; 64-DAG: add.d $f0, $[[T0]], $[[T1]] |
Daniel Sanders | ded02af | 2014-06-12 11:04:18 +0000 | [diff] [blame] | 223 | |
Petar Jovanovic | 64fb7a8 | 2017-06-06 15:33:01 +0000 | [diff] [blame] | 224 | ; 64R2: madd.d $[[T0:f[0-9]+]], $f14, $f12, $f13 |
| 225 | ; 64R2: mtc1 $zero, $[[T1:f[0-9]+]] |
| 226 | ; 64R2: add.d $f0, $[[T0]], $[[T1]] |
Daniel Sanders | ded02af | 2014-06-12 11:04:18 +0000 | [diff] [blame] | 227 | |
Petar Jovanovic | 64fb7a8 | 2017-06-06 15:33:01 +0000 | [diff] [blame] | 228 | ; 64R6-NOMADD-DAG: mul.d $[[T1:f[0-9]+]], $f12, $f13 |
| 229 | ; 64R6-NOMADD-DAG: add.d $[[T2:f[0-9]+]], $[[T1]], $f14 |
| 230 | ; 64R6-NOMADD-DAG: dmtc1 $zero, $[[T2:f[0-9]+]] |
| 231 | ; 64R6-NOMADD-DAG: add.d $f0, $[[T1]], $[[T2]] |
Daniel Sanders | ded02af | 2014-06-12 11:04:18 +0000 | [diff] [blame] | 232 | |
Akira Hatanaka | 60f7a8e | 2012-02-25 00:21:52 +0000 | [diff] [blame] | 233 | %mul = fmul double %a, %b |
| 234 | %add = fadd double %mul, %c |
| 235 | %add1 = fadd double %add, 0.000000e+00 |
| 236 | ret double %add1 |
| 237 | } |
| 238 | |
| 239 | define double @FOO11double(double %a, double %b, double %c) nounwind readnone { |
| 240 | entry: |
Daniel Sanders | ded02af | 2014-06-12 11:04:18 +0000 | [diff] [blame] | 241 | ; ALL-LABEL: FOO11double: |
| 242 | |
Petar Jovanovic | 64fb7a8 | 2017-06-06 15:33:01 +0000 | [diff] [blame] | 243 | ; 32-NOMADD-DAG: ldc1 $[[T0:f[0-9]+]], 16($sp) |
| 244 | ; 32-NOMADD-DAG: mul.d $[[T1:f[0-9]+]], $f12, $f14 |
| 245 | ; 32-NOMADD-DAG: sub.d $[[T2:f[0-9]+]], $[[T1]], $[[T0]] |
| 246 | ; 32-NOMADD-DAG: mtc1 $zero, $[[T2:f[0-9]+]] |
| 247 | ; 32-NOMADD-DAG: add.d $f0, $[[T1]], $[[T2]] |
Daniel Sanders | ded02af | 2014-06-12 11:04:18 +0000 | [diff] [blame] | 248 | |
Petar Jovanovic | 64fb7a8 | 2017-06-06 15:33:01 +0000 | [diff] [blame] | 249 | ; 32R2: ldc1 $[[T0:f[0-9]+]], 16($sp) |
| 250 | ; 32R2: msub.d $[[T1:f[0-9]+]], $[[T0]], $f12, $f14 |
| 251 | ; 32R2: mtc1 $zero, $[[T2:f[0-9]+]] |
| 252 | ; 32R2: mthc1 $zero, $[[T2]] |
| 253 | ; 32R2: add.d $f0, $[[T1]], $[[T2]] |
Daniel Sanders | ded02af | 2014-06-12 11:04:18 +0000 | [diff] [blame] | 254 | |
Petar Jovanovic | 64fb7a8 | 2017-06-06 15:33:01 +0000 | [diff] [blame] | 255 | ; 32R6-NOMADD-DAG: ldc1 $[[T0:f[0-9]+]], 16($sp) |
| 256 | ; 32R6-NOMADD-DAG: mul.d $[[T1:f[0-9]+]], $f12, $f14 |
| 257 | ; 32R6-NOMADD-DAG: sub.d $[[T2:f[0-9]+]], $[[T1]], $[[T0]] |
| 258 | ; 32R6-NOMADD-DAG: mtc1 $zero, $[[T2:f[0-9]+]] |
| 259 | ; 32R6-NOMADD-DAG: add.d $f0, $[[T1]], $[[T2]] |
Daniel Sanders | ded02af | 2014-06-12 11:04:18 +0000 | [diff] [blame] | 260 | |
Petar Jovanovic | 64fb7a8 | 2017-06-06 15:33:01 +0000 | [diff] [blame] | 261 | ; 64-DAG: msub.d $[[T0:f[0-9]+]], $f14, $f12, $f13 |
| 262 | ; 64-DAG: mtc1 $zero, $[[T1:f[0-9]+]] |
| 263 | ; 64-DAG: add.d $f0, $[[T0]], $[[T1]] |
Daniel Sanders | ded02af | 2014-06-12 11:04:18 +0000 | [diff] [blame] | 264 | |
Petar Jovanovic | 64fb7a8 | 2017-06-06 15:33:01 +0000 | [diff] [blame] | 265 | ; 64R2: msub.d $[[T0:f[0-9]+]], $f14, $f12, $f13 |
| 266 | ; 64R2: mtc1 $zero, $[[T1:f[0-9]+]] |
| 267 | ; 64R2: add.d $f0, $[[T0]], $[[T1]] |
Daniel Sanders | ded02af | 2014-06-12 11:04:18 +0000 | [diff] [blame] | 268 | |
Petar Jovanovic | 64fb7a8 | 2017-06-06 15:33:01 +0000 | [diff] [blame] | 269 | ; 64R6-NOMADD-DAG: mul.d $[[T1:f[0-9]+]], $f12, $f13 |
| 270 | ; 64R6-NOMADD-DAG: sub.d $[[T2:f[0-9]+]], $[[T1]], $f14 |
| 271 | ; 64R6-NOMADD-DAG: dmtc1 $zero, $[[T2:f[0-9]+]] |
| 272 | ; 64R6-NOMADD-DAG: add.d $f0, $[[T1]], $[[T2]] |
Daniel Sanders | ded02af | 2014-06-12 11:04:18 +0000 | [diff] [blame] | 273 | |
Akira Hatanaka | 60f7a8e | 2012-02-25 00:21:52 +0000 | [diff] [blame] | 274 | %mul = fmul double %a, %b |
| 275 | %sub = fsub double %mul, %c |
| 276 | %add = fadd double %sub, 0.000000e+00 |
| 277 | ret double %add |
| 278 | } |
| 279 | |
| 280 | define double @FOO12double(double %a, double %b, double %c) nounwind readnone { |
| 281 | entry: |
Daniel Sanders | ded02af | 2014-06-12 11:04:18 +0000 | [diff] [blame] | 282 | ; ALL-LABEL: FOO12double: |
| 283 | |
Petar Jovanovic | 64fb7a8 | 2017-06-06 15:33:01 +0000 | [diff] [blame] | 284 | ; 32-NOMADD-DAG: ldc1 $[[T0:f[0-9]+]], 16($sp) |
| 285 | ; 32-NOMADD-DAG: mul.d $[[T1:f[0-9]+]], $f12, $f14 |
| 286 | ; 32-NOMADD-DAG: add.d $[[T2:f[0-9]+]], $[[T1]], $[[T0]] |
| 287 | ; 32-NOMADD-DAG: mtc1 $zero, $[[T2:f[0-9]+]] |
| 288 | ; 32-NOMADD-DAG: sub.d $f0, $[[T2]], $[[T1]] |
Daniel Sanders | ded02af | 2014-06-12 11:04:18 +0000 | [diff] [blame] | 289 | |
Petar Jovanovic | 64fb7a8 | 2017-06-06 15:33:01 +0000 | [diff] [blame] | 290 | ; 32R2-NONAN: ldc1 $[[T0:f[0-9]+]], 16($sp) |
| 291 | ; 32R2-NONAN: nmadd.d $f0, $[[T0]], $f12, $f14 |
Daniel Sanders | ded02af | 2014-06-12 11:04:18 +0000 | [diff] [blame] | 292 | |
Petar Jovanovic | 64fb7a8 | 2017-06-06 15:33:01 +0000 | [diff] [blame] | 293 | ; 32R2-NAN: ldc1 $[[T0:f[0-9]+]], 16($sp) |
| 294 | ; 32R2-NAN: madd.d $[[T1:f[0-9]+]], $[[T0]], $f12, $f14 |
| 295 | ; 32R2-NAN: mtc1 $zero, $[[T2:f[0-9]+]] |
| 296 | ; 32R2-NAN: mthc1 $zero, $[[T2]] |
| 297 | ; 32R2-NAN: sub.d $f0, $[[T2]], $[[T1]] |
Daniel Sanders | ded02af | 2014-06-12 11:04:18 +0000 | [diff] [blame] | 298 | |
Petar Jovanovic | 64fb7a8 | 2017-06-06 15:33:01 +0000 | [diff] [blame] | 299 | ; 32R6-NOMADD-DAG: ldc1 $[[T0:f[0-9]+]], 16($sp) |
| 300 | ; 32R6-NOMADD-DAG: mul.d $[[T1:f[0-9]+]], $f12, $f14 |
| 301 | ; 32R6-NOMADD-DAG: add.d $[[T2:f[0-9]+]], $[[T1]], $[[T0]] |
| 302 | ; 32R6-NOMADD-DAG: mtc1 $zero, $[[T2:f[0-9]+]] |
| 303 | ; 32R6-NOMADD-DAG: sub.d $f0, $[[T2]], $[[T1]] |
Daniel Sanders | ded02af | 2014-06-12 11:04:18 +0000 | [diff] [blame] | 304 | |
Petar Jovanovic | 64fb7a8 | 2017-06-06 15:33:01 +0000 | [diff] [blame] | 305 | ; 64-NONAN: nmadd.d $f0, $f14, $f12, $f13 |
Vladimir Medic | bcb7467 | 2015-02-25 15:24:37 +0000 | [diff] [blame] | 306 | |
Petar Jovanovic | 64fb7a8 | 2017-06-06 15:33:01 +0000 | [diff] [blame] | 307 | ; 64-NAN: madd.d $[[T0:f[0-9]+]], $f14, $f12, $f13 |
| 308 | ; 64-NAN: mtc1 $zero, $[[T1:f[0-9]+]] |
| 309 | ; 64-NAN: sub.d $f0, $[[T1]], $[[T0]] |
Daniel Sanders | ded02af | 2014-06-12 11:04:18 +0000 | [diff] [blame] | 310 | |
Petar Jovanovic | 64fb7a8 | 2017-06-06 15:33:01 +0000 | [diff] [blame] | 311 | ; 64R2-NONAN: nmadd.d $f0, $f14, $f12, $f13 |
Daniel Sanders | ded02af | 2014-06-12 11:04:18 +0000 | [diff] [blame] | 312 | |
Petar Jovanovic | 64fb7a8 | 2017-06-06 15:33:01 +0000 | [diff] [blame] | 313 | ; 64R2-NAN: madd.d $[[T0:f[0-9]+]], $f14, $f12, $f13 |
| 314 | ; 64R2-NAN: mtc1 $zero, $[[T1:f[0-9]+]] |
| 315 | ; 64R2-NAN: sub.d $f0, $[[T1]], $[[T0]] |
Daniel Sanders | ded02af | 2014-06-12 11:04:18 +0000 | [diff] [blame] | 316 | |
Petar Jovanovic | 64fb7a8 | 2017-06-06 15:33:01 +0000 | [diff] [blame] | 317 | ; 64R6-NOMADD-DAG: mul.d $[[T1:f[0-9]+]], $f12, $f13 |
| 318 | ; 64R6-NOMADD-DAG: add.d $[[T2:f[0-9]+]], $[[T1]], $f14 |
| 319 | ; 64R6-NOMADD-DAG: dmtc1 $zero, $[[T2:f[0-9]+]] |
| 320 | ; 64R6-NOMADD-DAG: sub.d $f0, $[[T2]], $[[T1]] |
Daniel Sanders | ded02af | 2014-06-12 11:04:18 +0000 | [diff] [blame] | 321 | |
Akira Hatanaka | 60f7a8e | 2012-02-25 00:21:52 +0000 | [diff] [blame] | 322 | %mul = fmul double %a, %b |
| 323 | %add = fadd double %mul, %c |
| 324 | %sub = fsub double 0.000000e+00, %add |
| 325 | ret double %sub |
| 326 | } |
| 327 | |
| 328 | define double @FOO13double(double %a, double %b, double %c) nounwind readnone { |
| 329 | entry: |
Daniel Sanders | ded02af | 2014-06-12 11:04:18 +0000 | [diff] [blame] | 330 | ; ALL-LABEL: FOO13double: |
| 331 | |
Petar Jovanovic | 64fb7a8 | 2017-06-06 15:33:01 +0000 | [diff] [blame] | 332 | ; 32-NOMADD-DAG: ldc1 $[[T0:f[0-9]+]], 16($sp) |
| 333 | ; 32-NOMADD-DAG: mul.d $[[T1:f[0-9]+]], $f12, $f14 |
| 334 | ; 32-NOMADD-DAG: sub.d $[[T2:f[0-9]+]], $[[T1]], $[[T0]] |
| 335 | ; 32-NOMADD-DAG: mtc1 $zero, $[[T2:f[0-9]+]] |
| 336 | ; 32-NOMADD-DAG: sub.d $f0, $[[T2]], $[[T1]] |
Daniel Sanders | ded02af | 2014-06-12 11:04:18 +0000 | [diff] [blame] | 337 | |
Petar Jovanovic | 64fb7a8 | 2017-06-06 15:33:01 +0000 | [diff] [blame] | 338 | ; 32R2-NONAN: ldc1 $[[T0:f[0-9]+]], 16($sp) |
| 339 | ; 32R2-NONAN: nmsub.d $f0, $[[T0]], $f12, $f14 |
Daniel Sanders | ded02af | 2014-06-12 11:04:18 +0000 | [diff] [blame] | 340 | |
Petar Jovanovic | 64fb7a8 | 2017-06-06 15:33:01 +0000 | [diff] [blame] | 341 | ; 32R2-NAN: ldc1 $[[T0:f[0-9]+]], 16($sp) |
| 342 | ; 32R2-NAN: msub.d $[[T1:f[0-9]+]], $[[T0]], $f12, $f14 |
| 343 | ; 32R2-NAN: mtc1 $zero, $[[T2:f[0-9]+]] |
| 344 | ; 32R2-NAN: mthc1 $zero, $[[T2]] |
| 345 | ; 32R2-NAN: sub.d $f0, $[[T2]], $[[T1]] |
Daniel Sanders | ded02af | 2014-06-12 11:04:18 +0000 | [diff] [blame] | 346 | |
Petar Jovanovic | 64fb7a8 | 2017-06-06 15:33:01 +0000 | [diff] [blame] | 347 | ; 32R6-NOMADD-DAG: ldc1 $[[T0:f[0-9]+]], 16($sp) |
| 348 | ; 32R6-NOMADD-DAG: mul.d $[[T1:f[0-9]+]], $f12, $f14 |
| 349 | ; 32R6-NOMADD-DAG: sub.d $[[T2:f[0-9]+]], $[[T1]], $[[T0]] |
| 350 | ; 32R6-NOMADD-DAG: mtc1 $zero, $[[T2:f[0-9]+]] |
| 351 | ; 32R6-NOMADD-DAG: sub.d $f0, $[[T2]], $[[T1]] |
Daniel Sanders | ded02af | 2014-06-12 11:04:18 +0000 | [diff] [blame] | 352 | |
Petar Jovanovic | 64fb7a8 | 2017-06-06 15:33:01 +0000 | [diff] [blame] | 353 | ; 64-NONAN: nmsub.d $f0, $f14, $f12, $f13 |
Vladimir Medic | bcb7467 | 2015-02-25 15:24:37 +0000 | [diff] [blame] | 354 | |
Petar Jovanovic | 64fb7a8 | 2017-06-06 15:33:01 +0000 | [diff] [blame] | 355 | ; 64-NAN: msub.d $[[T0:f[0-9]+]], $f14, $f12, $f13 |
| 356 | ; 64-NAN: mtc1 $zero, $[[T1:f[0-9]+]] |
| 357 | ; 64-NAN: sub.d $f0, $[[T1]], $[[T0]] |
Daniel Sanders | ded02af | 2014-06-12 11:04:18 +0000 | [diff] [blame] | 358 | |
Petar Jovanovic | 64fb7a8 | 2017-06-06 15:33:01 +0000 | [diff] [blame] | 359 | ; 64R2-NONAN: nmsub.d $f0, $f14, $f12, $f13 |
Daniel Sanders | ded02af | 2014-06-12 11:04:18 +0000 | [diff] [blame] | 360 | |
Petar Jovanovic | 64fb7a8 | 2017-06-06 15:33:01 +0000 | [diff] [blame] | 361 | ; 64R2-NAN: msub.d $[[T0:f[0-9]+]], $f14, $f12, $f13 |
| 362 | ; 64R2-NAN: mtc1 $zero, $[[T1:f[0-9]+]] |
| 363 | ; 64R2-NAN: sub.d $f0, $[[T1]], $[[T0]] |
Daniel Sanders | ded02af | 2014-06-12 11:04:18 +0000 | [diff] [blame] | 364 | |
Petar Jovanovic | 64fb7a8 | 2017-06-06 15:33:01 +0000 | [diff] [blame] | 365 | ; 64R6-NOMADD-DAG: mul.d $[[T1:f[0-9]+]], $f12, $f13 |
| 366 | ; 64R6-NOMADD-DAG: sub.d $[[T2:f[0-9]+]], $[[T1]], $f14 |
| 367 | ; 64R6-NOMADD-DAG: dmtc1 $zero, $[[T2:f[0-9]+]] |
| 368 | ; 64R6-NOMADD-DAG: sub.d $f0, $[[T2]], $[[T1]] |
Daniel Sanders | ded02af | 2014-06-12 11:04:18 +0000 | [diff] [blame] | 369 | |
Akira Hatanaka | 60f7a8e | 2012-02-25 00:21:52 +0000 | [diff] [blame] | 370 | %mul = fmul double %a, %b |
| 371 | %sub = fsub double %mul, %c |
| 372 | %sub1 = fsub double 0.000000e+00, %sub |
| 373 | ret double %sub1 |
| 374 | } |