xref: /openbsd-src/gnu/llvm/llvm/tools/llvm-reduce/deltas/Utils.cpp (revision d415bd752c734aee168c4ee86ff32e8cc249eb16)
1*d415bd75Srobert //===- Utils.cpp - llvm-reduce utility functions --------------------------===//
2*d415bd75Srobert //
3*d415bd75Srobert // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4*d415bd75Srobert // See https://llvm.org/LICENSE.txt for license information.
5*d415bd75Srobert // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6*d415bd75Srobert //
7*d415bd75Srobert //===----------------------------------------------------------------------===//
8*d415bd75Srobert //
9*d415bd75Srobert // This file contains some utility functions supporting llvm-reduce.
10*d415bd75Srobert //
11*d415bd75Srobert //===----------------------------------------------------------------------===//
12*d415bd75Srobert 
13*d415bd75Srobert #include "Utils.h"
14*d415bd75Srobert #include "llvm/IR/Constants.h"
15*d415bd75Srobert #include "llvm/IR/GlobalAlias.h"
16*d415bd75Srobert #include "llvm/IR/GlobalIFunc.h"
17*d415bd75Srobert 
18*d415bd75Srobert using namespace llvm;
19*d415bd75Srobert 
20*d415bd75Srobert extern cl::OptionCategory LLVMReduceOptions;
21*d415bd75Srobert 
22*d415bd75Srobert cl::opt<bool> llvm::Verbose("verbose",
23*d415bd75Srobert                             cl::desc("Print extra debugging information"),
24*d415bd75Srobert                             cl::init(false), cl::cat(LLVMReduceOptions));
25*d415bd75Srobert 
getDefaultValue(Type * T)26*d415bd75Srobert Value *llvm::getDefaultValue(Type *T) {
27*d415bd75Srobert   return T->isVoidTy() ? PoisonValue::get(T) : Constant::getNullValue(T);
28*d415bd75Srobert }
29*d415bd75Srobert 
hasAliasUse(Function & F)30*d415bd75Srobert bool llvm::hasAliasUse(Function &F) {
31*d415bd75Srobert   return any_of(F.users(), [](User *U) {
32*d415bd75Srobert       return isa<GlobalAlias>(U) || isa<GlobalIFunc>(U);
33*d415bd75Srobert     });
34*d415bd75Srobert }
35*d415bd75Srobert 
hasAliasOrBlockAddressUse(Function & F)36*d415bd75Srobert bool llvm::hasAliasOrBlockAddressUse(Function &F) {
37*d415bd75Srobert   return any_of(F.users(), [](User *U) {
38*d415bd75Srobert     return isa<GlobalAlias, GlobalIFunc, BlockAddress>(U);
39*d415bd75Srobert   });
40*d415bd75Srobert }
41