191585d9acd75a2bdbfd177bf56c8b9436f442152Yang Ni//===---------------------- FunctionDescriptor.cpp -----------------------===// 291585d9acd75a2bdbfd177bf56c8b9436f442152Yang Ni// 391585d9acd75a2bdbfd177bf56c8b9436f442152Yang Ni// SPIR Tools 491585d9acd75a2bdbfd177bf56c8b9436f442152Yang Ni// 591585d9acd75a2bdbfd177bf56c8b9436f442152Yang Ni// This file is distributed under the University of Illinois Open Source 691585d9acd75a2bdbfd177bf56c8b9436f442152Yang Ni// License. See LICENSE.TXT for details. 791585d9acd75a2bdbfd177bf56c8b9436f442152Yang Ni// 891585d9acd75a2bdbfd177bf56c8b9436f442152Yang Ni//===---------------------------------------------------------------------===// 991585d9acd75a2bdbfd177bf56c8b9436f442152Yang Ni/* 1091585d9acd75a2bdbfd177bf56c8b9436f442152Yang Ni * Contributed by: Intel Corporation. 1191585d9acd75a2bdbfd177bf56c8b9436f442152Yang Ni */ 1291585d9acd75a2bdbfd177bf56c8b9436f442152Yang Ni 1391585d9acd75a2bdbfd177bf56c8b9436f442152Yang Ni#include "FunctionDescriptor.h" 1491585d9acd75a2bdbfd177bf56c8b9436f442152Yang Ni#include "ParameterType.h" 1591585d9acd75a2bdbfd177bf56c8b9436f442152Yang Ni#include <sstream> 1691585d9acd75a2bdbfd177bf56c8b9436f442152Yang Ni 1791585d9acd75a2bdbfd177bf56c8b9436f442152Yang Ninamespace SPIR { 1891585d9acd75a2bdbfd177bf56c8b9436f442152Yang Ni 1991585d9acd75a2bdbfd177bf56c8b9436f442152Yang Nistd::string FunctionDescriptor::nullString() { 2091585d9acd75a2bdbfd177bf56c8b9436f442152Yang Ni return std::string("<invalid>"); 2191585d9acd75a2bdbfd177bf56c8b9436f442152Yang Ni} 2291585d9acd75a2bdbfd177bf56c8b9436f442152Yang Ni 2391585d9acd75a2bdbfd177bf56c8b9436f442152Yang Nistd::string FunctionDescriptor::toString() const { 2491585d9acd75a2bdbfd177bf56c8b9436f442152Yang Ni std::stringstream stream; 2591585d9acd75a2bdbfd177bf56c8b9436f442152Yang Ni if (isNull()) { 2691585d9acd75a2bdbfd177bf56c8b9436f442152Yang Ni return FunctionDescriptor::nullString(); 2791585d9acd75a2bdbfd177bf56c8b9436f442152Yang Ni } 2891585d9acd75a2bdbfd177bf56c8b9436f442152Yang Ni stream << name << "("; 2991585d9acd75a2bdbfd177bf56c8b9436f442152Yang Ni size_t paramCount = parameters.size(); 3091585d9acd75a2bdbfd177bf56c8b9436f442152Yang Ni if (paramCount > 0) { 3191585d9acd75a2bdbfd177bf56c8b9436f442152Yang Ni for (size_t i=0 ; i<paramCount-1 ; ++i) 3291585d9acd75a2bdbfd177bf56c8b9436f442152Yang Ni stream << parameters[i]->toString() << ", "; 3391585d9acd75a2bdbfd177bf56c8b9436f442152Yang Ni stream << parameters[paramCount-1]->toString(); 3491585d9acd75a2bdbfd177bf56c8b9436f442152Yang Ni } 3591585d9acd75a2bdbfd177bf56c8b9436f442152Yang Ni stream << ")"; 3691585d9acd75a2bdbfd177bf56c8b9436f442152Yang Ni return stream.str(); 3791585d9acd75a2bdbfd177bf56c8b9436f442152Yang Ni} 3891585d9acd75a2bdbfd177bf56c8b9436f442152Yang Ni 3991585d9acd75a2bdbfd177bf56c8b9436f442152Yang Nistatic bool equal(const TypeVector& l, const TypeVector& r) { 4091585d9acd75a2bdbfd177bf56c8b9436f442152Yang Ni if (&l == &r) 4191585d9acd75a2bdbfd177bf56c8b9436f442152Yang Ni return true; 4291585d9acd75a2bdbfd177bf56c8b9436f442152Yang Ni if (l.size() != r.size()) 4391585d9acd75a2bdbfd177bf56c8b9436f442152Yang Ni return false; 4491585d9acd75a2bdbfd177bf56c8b9436f442152Yang Ni TypeVector::const_iterator itl = l.begin(), itr = r.begin(), 4591585d9acd75a2bdbfd177bf56c8b9436f442152Yang Ni endl = l.end(); 4691585d9acd75a2bdbfd177bf56c8b9436f442152Yang Ni while (itl != endl) { 4791585d9acd75a2bdbfd177bf56c8b9436f442152Yang Ni if (!(*itl)->equals(*itr)) 4891585d9acd75a2bdbfd177bf56c8b9436f442152Yang Ni return false; 4991585d9acd75a2bdbfd177bf56c8b9436f442152Yang Ni ++itl; 5091585d9acd75a2bdbfd177bf56c8b9436f442152Yang Ni ++itr; 5191585d9acd75a2bdbfd177bf56c8b9436f442152Yang Ni } 5291585d9acd75a2bdbfd177bf56c8b9436f442152Yang Ni return true; 5391585d9acd75a2bdbfd177bf56c8b9436f442152Yang Ni} 5491585d9acd75a2bdbfd177bf56c8b9436f442152Yang Ni 5591585d9acd75a2bdbfd177bf56c8b9436f442152Yang Ni// 5691585d9acd75a2bdbfd177bf56c8b9436f442152Yang Ni// FunctionDescriptor 5791585d9acd75a2bdbfd177bf56c8b9436f442152Yang Ni// 5891585d9acd75a2bdbfd177bf56c8b9436f442152Yang Ni 5991585d9acd75a2bdbfd177bf56c8b9436f442152Yang Nibool FunctionDescriptor::operator == (const FunctionDescriptor& that) const { 6091585d9acd75a2bdbfd177bf56c8b9436f442152Yang Ni if (this == &that) 6191585d9acd75a2bdbfd177bf56c8b9436f442152Yang Ni return true; 6291585d9acd75a2bdbfd177bf56c8b9436f442152Yang Ni if (name != that.name) 6391585d9acd75a2bdbfd177bf56c8b9436f442152Yang Ni return false; 6491585d9acd75a2bdbfd177bf56c8b9436f442152Yang Ni return equal(parameters, that.parameters); 6591585d9acd75a2bdbfd177bf56c8b9436f442152Yang Ni} 6691585d9acd75a2bdbfd177bf56c8b9436f442152Yang Ni 6791585d9acd75a2bdbfd177bf56c8b9436f442152Yang Nibool FunctionDescriptor::operator < (const FunctionDescriptor& that) const { 6891585d9acd75a2bdbfd177bf56c8b9436f442152Yang Ni int strCmp = name.compare(that.name); 6991585d9acd75a2bdbfd177bf56c8b9436f442152Yang Ni if (strCmp) 7091585d9acd75a2bdbfd177bf56c8b9436f442152Yang Ni return (strCmp < 0); 7191585d9acd75a2bdbfd177bf56c8b9436f442152Yang Ni size_t len = parameters.size(), thatLen = that.parameters.size(); 7291585d9acd75a2bdbfd177bf56c8b9436f442152Yang Ni if (len != thatLen) 7391585d9acd75a2bdbfd177bf56c8b9436f442152Yang Ni return len < thatLen; 7491585d9acd75a2bdbfd177bf56c8b9436f442152Yang Ni TypeVector::const_iterator it = parameters.begin(), 7591585d9acd75a2bdbfd177bf56c8b9436f442152Yang Ni e = parameters.end(), thatit = that.parameters.begin(); 7691585d9acd75a2bdbfd177bf56c8b9436f442152Yang Ni while (it != e) { 7791585d9acd75a2bdbfd177bf56c8b9436f442152Yang Ni int cmp = (*it)->toString().compare((*thatit)->toString()); 7891585d9acd75a2bdbfd177bf56c8b9436f442152Yang Ni if (cmp) 7991585d9acd75a2bdbfd177bf56c8b9436f442152Yang Ni return (cmp < 0); 8091585d9acd75a2bdbfd177bf56c8b9436f442152Yang Ni ++thatit; 8191585d9acd75a2bdbfd177bf56c8b9436f442152Yang Ni ++it; 8291585d9acd75a2bdbfd177bf56c8b9436f442152Yang Ni } 8391585d9acd75a2bdbfd177bf56c8b9436f442152Yang Ni return false; 8491585d9acd75a2bdbfd177bf56c8b9436f442152Yang Ni} 8591585d9acd75a2bdbfd177bf56c8b9436f442152Yang Ni 8691585d9acd75a2bdbfd177bf56c8b9436f442152Yang Nibool FunctionDescriptor::isNull() const { 8791585d9acd75a2bdbfd177bf56c8b9436f442152Yang Ni return (name.empty() && parameters.empty()); 8891585d9acd75a2bdbfd177bf56c8b9436f442152Yang Ni} 8991585d9acd75a2bdbfd177bf56c8b9436f442152Yang Ni 9091585d9acd75a2bdbfd177bf56c8b9436f442152Yang NiFunctionDescriptor FunctionDescriptor::null() { 9191585d9acd75a2bdbfd177bf56c8b9436f442152Yang Ni FunctionDescriptor fd; 9291585d9acd75a2bdbfd177bf56c8b9436f442152Yang Ni fd.name = ""; 9391585d9acd75a2bdbfd177bf56c8b9436f442152Yang Ni return fd; 9491585d9acd75a2bdbfd177bf56c8b9436f442152Yang Ni} 9591585d9acd75a2bdbfd177bf56c8b9436f442152Yang Ni 9691585d9acd75a2bdbfd177bf56c8b9436f442152Yang Ni} // End SPIR namespace 97