brintos

brintos / llvm-project-archived public Read only

0
0
Text · 1.9 KiB · d4c25f2 Raw
57 lines · cpp
1//===- ReduceTargetFeaturesAttr.cpp - Specialized Delta Pass --------------===//2//3// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.4// See https://llvm.org/LICENSE.txt for license information.5// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception6//7//===----------------------------------------------------------------------===//8//9// Attempt to remove individual elements of the "target-features" attribute on10// functions.11//12//===----------------------------------------------------------------------===//13 14#include "ReduceTargetFeaturesAttr.h"15 16#include "llvm/ADT/SmallString.h"17#include "llvm/ADT/StringExtras.h"18#include "llvm/IR/Function.h"19 20// TODO: We could maybe do better if we did a semantic parse of the attributes21// through MCSubtargetInfo. Features can be flipped on and off in the string,22// some are implied by target-cpu and can't be meaningfully re-added.23void llvm::reduceTargetFeaturesAttrDeltaPass(Oracle &O,24                                             ReducerWorkItem &WorkItem) {25  Module &M = WorkItem.getModule();26  SmallString<256> NewValueString;27  SmallVector<StringRef, 32> SplitFeatures;28 29  for (Function &F : M) {30    Attribute TargetFeaturesAttr = F.getFnAttribute("target-features");31    if (!TargetFeaturesAttr.isValid())32      continue;33 34    StringRef TargetFeatures = TargetFeaturesAttr.getValueAsString();35    TargetFeatures.split(SplitFeatures, ',', /*MaxSplit=*/-1,36                         /*KeepEmpty=*/false);37 38    ListSeparator LS(",");39 40    {41      raw_svector_ostream OS(NewValueString);42      for (StringRef Feature : SplitFeatures) {43        if (O.shouldKeep())44          OS << LS << Feature;45      }46    }47 48    if (NewValueString.empty())49      F.removeFnAttr("target-features");50    else51      F.addFnAttr("target-features", NewValueString);52 53    SplitFeatures.clear();54    NewValueString.clear();55  }56}57