12962f9dfSJohn Regehr //===- Utils.cpp - llvm-reduce utility functions --------------------------===// 22962f9dfSJohn Regehr // 32962f9dfSJohn Regehr // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. 42962f9dfSJohn Regehr // See https://llvm.org/LICENSE.txt for license information. 52962f9dfSJohn Regehr // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception 62962f9dfSJohn Regehr // 72962f9dfSJohn Regehr //===----------------------------------------------------------------------===// 82962f9dfSJohn Regehr // 92962f9dfSJohn Regehr // This file contains some utility functions supporting llvm-reduce. 102962f9dfSJohn Regehr // 112962f9dfSJohn Regehr //===----------------------------------------------------------------------===// 122962f9dfSJohn Regehr 132962f9dfSJohn Regehr #include "Utils.h" 142962f9dfSJohn Regehr #include "llvm/IR/Constants.h" 15195087d8SArthur Eubanks #include "llvm/IR/GlobalAlias.h" 168e3e218aSMatt Arsenault #include "llvm/IR/GlobalIFunc.h" 172962f9dfSJohn Regehr 182962f9dfSJohn Regehr using namespace llvm; 192962f9dfSJohn Regehr 20309d4538SArthur Eubanks extern cl::OptionCategory LLVMReduceOptions; 21309d4538SArthur Eubanks 22309d4538SArthur Eubanks cl::opt<bool> llvm::Verbose("verbose", 23309d4538SArthur Eubanks cl::desc("Print extra debugging information"), 24309d4538SArthur Eubanks cl::init(false), cl::cat(LLVMReduceOptions)); 25309d4538SArthur Eubanks getDefaultValue(Type * T)262962f9dfSJohn RegehrValue *llvm::getDefaultValue(Type *T) { 272962f9dfSJohn Regehr return T->isVoidTy() ? PoisonValue::get(T) : Constant::getNullValue(T); 282962f9dfSJohn Regehr } 29195087d8SArthur Eubanks hasAliasUse(Function & F)30195087d8SArthur Eubanksbool llvm::hasAliasUse(Function &F) { 318e3e218aSMatt Arsenault return any_of(F.users(), [](User *U) { 328e3e218aSMatt Arsenault return isa<GlobalAlias>(U) || isa<GlobalIFunc>(U); 338e3e218aSMatt Arsenault }); 34195087d8SArthur Eubanks } 35*ae6a5c1dSMatt Arsenault hasAliasOrBlockAddressUse(Function & F)36*ae6a5c1dSMatt Arsenaultbool llvm::hasAliasOrBlockAddressUse(Function &F) { 37*ae6a5c1dSMatt Arsenault return any_of(F.users(), [](User *U) { 38*ae6a5c1dSMatt Arsenault return isa<GlobalAlias, GlobalIFunc, BlockAddress>(U); 39*ae6a5c1dSMatt Arsenault }); 40*ae6a5c1dSMatt Arsenault } 41