1f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainar//===-- HexagonTargetTransformInfo.cpp - Hexagon specific TTI pass --------===// 2f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainar// 3f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainar// The LLVM Compiler Infrastructure 4f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainar// 5f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainar// This file is distributed under the University of Illinois Open Source 6f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainar// License. See LICENSE.TXT for details. 7f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainar// 8f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainar/// \file 9f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainar/// This file implements a TargetTransformInfo analysis pass specific to the 10f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainar/// Hexagon target machine. It uses the target's detailed information to provide 11f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainar/// more precise answers to certain TTI queries, while letting the target 12f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainar/// independent and default TTI implementations handle the rest. 13f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainar/// 14f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainar//===----------------------------------------------------------------------===// 15f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainar 16f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainar#include "HexagonTargetTransformInfo.h" 17f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainar#include "llvm/Support/Debug.h" 18f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainar 19f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainarusing namespace llvm; 20f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainar 21f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainar#define DEBUG_TYPE "hexagontti" 22f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainar 23f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga NainarTargetTransformInfo::PopcntSupportKind 24f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga NainarHexagonTTIImpl::getPopcntSupport(unsigned IntTyWidthInBit) const { 25f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainar // Return Fast Hardware support as every input < 64 bits will be promoted 26f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainar // to 64 bits. 27f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainar return TargetTransformInfo::PSK_FastHardware; 28f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainar} 29f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainar 30f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainar// The Hexagon target can unroll loops with run-time trip counts. 31f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainarvoid HexagonTTIImpl::getUnrollingPreferences(Loop *L, 32f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainar TTI::UnrollingPreferences &UP) { 33f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainar UP.Runtime = UP.Partial = true; 34f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainar} 35f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainar 36f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainarunsigned HexagonTTIImpl::getNumberOfRegisters(bool vector) const { 37f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainar return vector ? 0 : 32; 38f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainar} 39