1384 //------------------------------Value------------------------------------------ 1385 const Type* FmaFNode::Value(PhaseGVN* phase) const { 1386 const Type *t1 = phase->type(in(1)); 1387 if (t1 == Type::TOP) return Type::TOP; 1388 if (t1->base() != Type::FloatCon) return Type::FLOAT; 1389 const Type *t2 = phase->type(in(2)); 1390 if (t2 == Type::TOP) return Type::TOP; 1391 if (t2->base() != Type::FloatCon) return Type::FLOAT; 1392 const Type *t3 = phase->type(in(3)); 1393 if (t3 == Type::TOP) return Type::TOP; 1394 if (t3->base() != Type::FloatCon) return Type::FLOAT; 1395 #ifndef __STDC_IEC_559__ 1396 return Type::FLOAT; 1397 #else 1398 float f1 = t1->getf(); 1399 float f2 = t2->getf(); 1400 float f3 = t3->getf(); 1401 return TypeF::make(fma(f1, f2, f3)); 1402 #endif 1403 } | 1384 //------------------------------Value------------------------------------------ 1385 const Type* FmaFNode::Value(PhaseGVN* phase) const { 1386 const Type *t1 = phase->type(in(1)); 1387 if (t1 == Type::TOP) return Type::TOP; 1388 if (t1->base() != Type::FloatCon) return Type::FLOAT; 1389 const Type *t2 = phase->type(in(2)); 1390 if (t2 == Type::TOP) return Type::TOP; 1391 if (t2->base() != Type::FloatCon) return Type::FLOAT; 1392 const Type *t3 = phase->type(in(3)); 1393 if (t3 == Type::TOP) return Type::TOP; 1394 if (t3->base() != Type::FloatCon) return Type::FLOAT; 1395 #ifndef __STDC_IEC_559__ 1396 return Type::FLOAT; 1397 #else 1398 float f1 = t1->getf(); 1399 float f2 = t2->getf(); 1400 float f3 = t3->getf(); 1401 return TypeF::make(fma(f1, f2, f3)); 1402 #endif 1403 } 1404 1405 //============================================================================= 1406 //------------------------------hash------------------------------------------- 1407 // Hash function for MulAddS2INode. Operation is commutative with commutative pairs. 1408 // The hash function must return the same value when edge swapping is performed. 1409 uint MulAddS2INode::hash() const { 1410 return (uintptr_t)in(1) + (uintptr_t)in(2) + (uintptr_t)in(3) + (uintptr_t)in(4) + Opcode(); 1411 } 1412 |