xref: /llvm-project/llvm/tools/llvm-reduce/deltas/Utils.cpp (revision ae6a5c1d08d8ac251a2b3dc08b023126b21b1b53)
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 Regehr Value *llvm::getDefaultValue(Type *T) {
272962f9dfSJohn Regehr   return T->isVoidTy() ? PoisonValue::get(T) : Constant::getNullValue(T);
282962f9dfSJohn Regehr }
29195087d8SArthur Eubanks 
hasAliasUse(Function & F)30195087d8SArthur Eubanks bool 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 Arsenault bool 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