1 /* 2 * Copyright (c) 2016, Red Hat, Inc. All rights reserved. 3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. 4 * 5 * This code is free software; you can redistribute it and/or modify it 6 * under the terms of the GNU General Public License version 2 only, as 7 * published by the Free Software Foundation. 8 * 9 * This code is distributed in the hope that it will be useful, but WITHOUT 10 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or 11 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License 12 * version 2 for more details (a copy is included in the LICENSE file that 13 * accompanied this code). 14 * 15 * You should have received a copy of the GNU General Public License version 16 * 2 along with this work; if not, write to the Free Software Foundation, 17 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. 18 * 19 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA 20 * or visit www.oracle.com if you need additional information or have any 21 * questions. 22 */ 23 24 /** 25 * @test 26 * @bug 8171092 27 * @summary C1's Math.fma() intrinsic doesn't correctly marks its inputs 28 * @run main/othervm -XX:-BackgroundCompilation -XX:-UseOnStackReplacement TestFMABrokenC1RegAlloc 29 * 30 */ 31 32 public class TestFMABrokenC1RegAlloc { 33 34 double dummy0; 35 double dummy1; 36 double dummy2; 37 double dummy3; 38 double dummy4; 39 double dummy5; 40 double dummy6; 41 double dummy7; 42 double dummy8; 43 double dummy9; 44 double dummy10; 45 double dummy11; 46 double dummy12; 47 double dummy13; 48 double dummy14; 49 double dummy15; 50 double dummy16; 51 double dummy17; 52 double dummy18; 53 double dummy19; 54 double dummy20; 55 double dummy21; 56 double dummy22; 57 double dummy23; 58 double dummy24; 59 double dummy25; 60 double dummy26; 61 double dummy27; 62 double dummy28; 63 double dummy29; 64 double dummy30; 65 double dummy31; 66 double dummy32; 67 double dummy33; 68 double dummy34; 69 double dummy35; 70 double dummy36; 71 double dummy37; 72 double dummy38; 73 double dummy39; 74 test(double a, double b, double c)75 double test(double a, double b, double c) { 76 double dummy0 = this.dummy0; 77 double dummy1 = this.dummy1; 78 double dummy2 = this.dummy2; 79 double dummy3 = this.dummy3; 80 double dummy4 = this.dummy4; 81 double dummy5 = this.dummy5; 82 double dummy6 = this.dummy6; 83 double dummy7 = this.dummy7; 84 double dummy8 = this.dummy8; 85 double dummy9 = this.dummy9; 86 double dummy10 = this.dummy10; 87 double dummy11 = this.dummy11; 88 double dummy12 = this.dummy12; 89 double dummy13 = this.dummy13; 90 double dummy14 = this.dummy14; 91 double dummy15 = this.dummy15; 92 double dummy16 = this.dummy16; 93 double dummy17 = this.dummy17; 94 double dummy18 = this.dummy18; 95 double dummy19 = this.dummy19; 96 double dummy20 = this.dummy20; 97 double dummy21 = this.dummy21; 98 double dummy22 = this.dummy22; 99 double dummy23 = this.dummy23; 100 double dummy24 = this.dummy24; 101 double dummy25 = this.dummy25; 102 double dummy26 = this.dummy26; 103 double dummy27 = this.dummy27; 104 double dummy28 = this.dummy28; 105 double dummy29 = this.dummy29; 106 double dummy30 = this.dummy30; 107 double dummy31 = this.dummy31; 108 double dummy32 = this.dummy32; 109 double dummy33 = this.dummy33; 110 double dummy34 = this.dummy34; 111 double dummy35 = this.dummy35; 112 double dummy36 = this.dummy36; 113 double dummy37 = this.dummy37; 114 double dummy38 = this.dummy38; 115 double dummy39 = this.dummy39; 116 return Math.fma(a, b, c) + 117 dummy0 + 118 dummy1 + 119 dummy2 + 120 dummy3 + 121 dummy4 + 122 dummy5 + 123 dummy6 + 124 dummy7 + 125 dummy8 + 126 dummy9 + 127 dummy10 + 128 dummy11 + 129 dummy12 + 130 dummy13 + 131 dummy14 + 132 dummy15 + 133 dummy16 + 134 dummy17 + 135 dummy18 + 136 dummy19 + 137 dummy20 + 138 dummy21 + 139 dummy22 + 140 dummy23 + 141 dummy24 + 142 dummy25 + 143 dummy26 + 144 dummy27 + 145 dummy28 + 146 dummy29 + 147 dummy30 + 148 dummy31 + 149 dummy32 + 150 dummy33 + 151 dummy34 + 152 dummy35 + 153 dummy36 + 154 dummy37 + 155 dummy38 + 156 dummy39; 157 } 158 main(String[] args)159 static public void main(String[] args) { 160 TestFMABrokenC1RegAlloc t = new TestFMABrokenC1RegAlloc(); 161 for (int i = 0; i < 5000; i++) { 162 if (t.test(5.0, 10.0, 7.0) != 57.0) { 163 throw new RuntimeException("Failed"); 164 } 165 } 166 } 167 } 168