aboutsummaryrefslogtreecommitdiff
path: root/llvm/lib/IR/IntrinsicInst.cpp
AgeCommit message (Collapse)AuthorFilesLines
2022-03-30[VP] Add vp.icmp comparison intrinsic and docsFraser Cormack1-3/+21
This patch mostly follows up on D121292 which introduced the vp.fcmp intrinsic. Reviewed By: craig.topper Differential Revision: https://reviews.llvm.org/D122729
2022-03-30[VP] Add vp.fcmp comparison intrinsic and docsFraser Cormack1-2/+37
This patch adds the first support for vector-predicated comparison intrinsics, starting with vp.fcmp. It uses metadata to encode its condition code, like the llvm.experimental.constrained.fcmp intrinsic. Reviewed By: craig.topper Differential Revision: https://reviews.llvm.org/D121292
2022-03-22[VP] Preserve address space of pointer for strided load/store intrinsics.Craig Topper1-3/+4
This adds LLVMAnyPointerToElt to use instead of LLVMPointerToElt. This allows us to preserve the address space as part of the type overload for the intrinsic, but still require the vector element type to match the pointer type. Reviewed By: nikic Differential Revision: https://reviews.llvm.org/D122042
2022-03-22[VP] Fix VPintrinsic::getStaticVectorLength for vp.merge|selectSimon Moll1-1/+6
VPIntrinsic::getStaticVectorLength infers the operational vector length of a VPIntrinsic instance from a type that is used with the intrinsic. The function used the mask operand before. Yet, vp.merge|select do not have a mask operand (in the predicating sense that the other VP intrinsics are using them - it is a selection mask for them). Fallback to the return type to fix this. Reviewed By: kaz7 Differential Revision: https://reviews.llvm.org/D121913
2022-03-10[VP] Strided loads/storesLorenzo Albano1-0/+8
This patch introduces two new experimental IR intrinsics and SDAG nodes to represent vector strided loads and stores. Reviewed By: simoll Differential Revision: https://reviews.llvm.org/D114884
2022-03-02[VP] vp.sitofp cast intrinsic and docsSimon Moll1-0/+1
Reviewed By: frasercrmck Differential Revision: https://reviews.llvm.org/D119922
2022-02-15[VP] vp.fptosi cast intrinsic and docsSimon Moll1-0/+16
Reviewed By: craig.topper Differential Revision: https://reviews.llvm.org/D119535
2022-02-02Cleanup header dependencies in LLVMCoreserge-sans-paille1-2/+0
Based on the output of include-what-you-use. This is a big chunk of changes. It is very likely to break downstream code unless they took a lot of care in avoiding hidden ehader dependencies, something the LLVM codebase doesn't do that well :-/ I've tried to summarize the biggest change below: - llvm/include/llvm-c/Core.h: no longer includes llvm-c/ErrorHandling.h - llvm/IR/DIBuilder.h no longer includes llvm/IR/DebugInfo.h - llvm/IR/IRBuilder.h no longer includes llvm/IR/IntrinsicInst.h - llvm/IR/LLVMRemarkStreamer.h no longer includes llvm/Support/ToolOutputFile.h - llvm/IR/LegacyPassManager.h no longer include llvm/Pass.h - llvm/IR/Type.h no longer includes llvm/ADT/SmallPtrSet.h - llvm/IR/PassManager.h no longer includes llvm/Pass.h nor llvm/Support/Debug.h And the usual count of preprocessed lines: $ clang++ -E -Iinclude -I../llvm/include ../llvm/lib/IR/*.cpp -std=c++14 -fno-rtti -fno-exceptions | wc -l before: 6400831 after: 6189948 200k lines less to process is no that bad ;-) Discourse thread on the topic: https://llvm.discourse.group/t/include-what-you-use-include-cleanup Differential Revision: https://reviews.llvm.org/D118652
2022-01-18[InstrProf][NFC] Add InstrProfInstBase baseEllis Hoag1-0/+12
The `InstrProfInstBase` class is for all `llvm.instrprof.*` intrinsics. In a later diff we will add new instrinsic of this type. Also refactor some logic in `InstrProfiling.cpp`. Reviewed By: davidxl Differential Revision: https://reviews.llvm.org/D117261
2022-01-12[VP] llvm.vp.merge intrinsic and LangRefSimon Moll1-0/+1
llvm.vp.merge interprets the %evl operand differently than the other vp intrinsics: all lanes at positions greater or equal than the %evl operand are passed through from the second vector input. Otherwise it behaves like llvm.vp.select. Reviewed By: craig.topper Differential Revision: https://reviews.llvm.org/D116725
2021-12-14[IR] Make VPIntrinsic::getDeclarationForParams() opaque pointer compatibleNikita Popov1-10/+4
The vp.load and vp.gather intrinsics require the intrinsic return type to determine the correct function signature. With opaque pointers, it cannot be derived from the parameter pointee types. Differential Revision: https://reviews.llvm.org/D115632
2021-11-23[VP] Canonicalize macros of VPIntrinsics.defSimon Moll1-33/+34
Usage and naming of macros in VPIntrinsics.def has been inconsistent. Rename all property macros to VP_PROPERTY_<name>. Use BEGIN/END scope macros to attach properties to vp intrinsics and SDNodes (instead of specifying either directly with the property macro). A follow-up patch has documentation on how the macros are (intended) to be used. Reviewed By: frasercrmck Differential Revision: https://reviews.llvm.org/D114144
2021-10-07[NFC] Rename functions to match our naming scheme.Kevin P. Neal1-2/+2
In the review of D111085 it was pointed out that these functions don't conform to the naming scheme in use in LLVM. With this commit we should be good for all of FPEnv.h.
2021-10-04[IR] Migrate from getNumArgOperands to arg_size (NFC)Kazu Hirata1-2/+2
Note that arg_operands is considered a legacy name. See llvm/include/llvm/IR/InstrTypes.h for details.
2021-09-02[VP] Declaration and docs for vp.select intrinsicSimon Moll1-0/+3
llvm.vp.select extends the regular select instruction with an explicit vector length (%evl). All lanes with indexes at and above %evl are undefined. Lanes below %evl are taken from the first input where the mask is true and from the second input otherwise. Reviewed By: rogfer01 Differential Revision: https://reviews.llvm.org/D105351
2021-08-17[VP] Add vector-predicated reduction intrinsicsFraser Cormack1-2/+50
This patch adds vector-predicated ("VP") reduction intrinsics corresponding to each of the existing unpredicated `llvm.vector.reduce.*` versions. Unlike the unpredicated reductions, all VP reductions have a start value. This start value is returned when the no vector element is active. Support for expansion on targets without native vector-predication support is included. This patch is based on the ["reduction slice"](https://reviews.llvm.org/D57504#1732277) of the LLVM-VP reference patch (https://reviews.llvm.org/D57504). Reviewed By: craig.topper Differential Revision: https://reviews.llvm.org/D104308
2021-07-01[VP] Implementation of intrinsic and SDNode definitions for VP load, store, ↵Hussain Kadhem1-5/+77
gather, scatter. This patch adds intrinsic definitions and SDNodes for predicated load/store/gather/scatter, based on the work done in D57504. Reviewed By: simoll, craig.topper Differential Revision: https://reviews.llvm.org/D99355
2021-06-24Partial Reapply "[DebugInfo] Use variadic debug values to salvage BinOps and ↵Stephen Tozer1-0/+17
GEP instrs with non-const operands" This is a partial reapply of the original commit and the followup commit that were previously reverted; this reapply also includes a small fix for a potential source of non-determinism, but also has a small change to turn off variadic debug value salvaging, to ensure that any future revert/reapply steps to disable and renable this feature do not risk causing conflicts. Differential Revision: https://reviews.llvm.org/D91722 This reverts commit 386b66b2fc297cda121a3cc8a36887a6ecbcfc68.
2021-06-21[VP][NFCI] Address various clang-tidy warningsFraser Cormack1-3/+3
Reviewed By: simoll Differential Revision: https://reviews.llvm.org/D104288
2021-06-08Revert "3rd Reapply "[DebugInfo] Use variadic debug values to salvage BinOps ↵Hans Wennborg1-17/+0
and GEP instrs with non-const operands"" > This reapplies c0f3dfb9, which was reverted following the discovery of > crashes on linux kernel and chromium builds - these issues have since > been fixed, allowing this patch to re-land. This reverts commit 36ec97f76ac0d8be76fb16ac521f55126766267d. The change caused non-determinism in the compiler, see comments on the code review at https://reviews.llvm.org/D91722. Reverting to unbreak people's builds until that can be addressed. This also reverts the follow-up "[DebugInfo] Limit the number of values that may be referenced by a dbg.value" in a0bd6105d80698c53ceaa64bbe6e3b7e7bbf99ee.
2021-06-08[VP] getDeclarationForParamsSimon Moll1-0/+11
`VPIntrinsic::getDeclarationForParams` creates a vp intrinsic declaration for parameters you want to call it with. This is in preparation of a new builder class that makes emitting vp intrinsic code nearly as convenient as using a plain ir builder (aka `VectorBuilder`, to be used by D99750). Reviewed By: frasercrmck, craig.topper, vkmr Differential Revision: https://reviews.llvm.org/D102686
2021-05-28[VP] Make getMaskParamPos/getVectorLengthParamPos return unsigned. Lowercase ↵Craig Topper1-14/+14
function names. Parameter positions seem like they should be unsigned. While there, make function names lowercase per coding standards. Reviewed By: frasercrmck Differential Revision: https://reviews.llvm.org/D103224
2021-05-213rd Reapply "[DebugInfo] Use variadic debug values to salvage BinOps and GEP ↵Stephen Tozer1-0/+17
instrs with non-const operands" This reapplies c0f3dfb9, which was reverted following the discovery of crashes on linux kernel and chromium builds - these issues have since been fixed, allowing this patch to re-land. This reverts commit 4397b7095d640f9b9426c4d0135e999c5a1de1c5.
2021-05-20[FPEnv] EarlyCSE support for constrained intrinsics, default FP environment ↵Kevin P. Neal1-4/+24
edition EarlyCSE cannot distinguish between floating point instructions and constrained floating point intrinsics that are marked as running in the default FP environment. Said intrinsics are supposed to behave exactly the same as the regular FP instructions. Teach EarlyCSE to handle them in that case. Differential Revision: https://reviews.llvm.org/D99962
2021-05-19[VP] make getFunctionalOpcode return an OptionalSimon Moll1-2/+2
The operation of some VP intrinsics do/will not map to regular instruction opcodes. Returning 'None' seems more intuitive here than 'Instruction::Call'. Reviewed By: frasercrmck Differential Revision: https://reviews.llvm.org/D102778
2021-05-04Recommit "[VP,Integer,#2] ExpandVectorPredication pass"Simon Moll1-0/+10
This reverts the revert 02c5ba8679873e878ae7a76fb26808a47940275b Fix: Pass was registered as DUMMY_FUNCTION_PASS causing the newpm-pass functions to be doubly defined. Triggered in -DLLVM_ENABLE_MODULE=1 builds. Original commit: This patch implements expansion of llvm.vp.* intrinsics (https://llvm.org/docs/LangRef.html#vector-predication-intrinsics). VP expansion is required for targets that do not implement VP code generation. Since expansion is controllable with TTI, targets can switch on the VP intrinsics they do support in their backend offering a smooth transition strategy for VP code generation (VE, RISC-V V, ARM SVE, AVX512, ..). Reviewed By: rogfer01 Differential Revision: https://reviews.llvm.org/D78203
2021-04-30Revert "Re-reapply "[DebugInfo] Use variadic debug values to salvage BinOps ↵Nathan Chancellor1-17/+0
and GEP instrs with non-const operands"" This reverts commit 791930d74087b8ae8901172861a0fd21a211e436, as per https://llvm.org/docs/DeveloperPolicy.html#patch-reversion-policy. I observed breakage with the Linux kernel, as reported at https://reviews.llvm.org/D91722#2724321 Fixes exist at https://reviews.llvm.org/D101523 https://reviews.llvm.org/D101540 but they have not landed so to unbreak the tree for the weekend, revert this commit. Commit b11e4c990771 ("Revert "[DebugInfo] Drop DBG_VALUE_LISTs with an excessive number of debug operands"") only reverted one follow-up fix, not the original patch that broke the kernel. e
2021-04-30Revert "[VP,Integer,#2] ExpandVectorPredication pass"Adrian Prantl1-10/+0
This reverts commit 43bc584dc05e24c6d44ece8e07d4bff585adaf6d. The commit broke the -DLLVM_ENABLE_MODULES=1 builds. http://green.lab.llvm.org/green/view/LLDB/job/lldb-cmake/31603/consoleFull#2136199809a1ca8a51-895e-46c6-af87-ce24fa4cd561
2021-04-30[VP,Integer,#2] ExpandVectorPredication passSimon Moll1-0/+10
This patch implements expansion of llvm.vp.* intrinsics (https://llvm.org/docs/LangRef.html#vector-predication-intrinsics). VP expansion is required for targets that do not implement VP code generation. Since expansion is controllable with TTI, targets can switch on the VP intrinsics they do support in their backend offering a smooth transition strategy for VP code generation (VE, RISC-V V, ARM SVE, AVX512, ..). Reviewed By: rogfer01 Differential Revision: https://reviews.llvm.org/D78203
2021-04-23Re-reapply "[DebugInfo] Use variadic debug values to salvage BinOps and GEP ↵Stephen Tozer1-0/+17
instrs with non-const operands" Previous build failures were caused by an error in bitcode reading and writing for DIArgList metadata, which has been fixed in e5d844b587. There were also some unnecessary asserts that were being triggered on certain builds, which have been removed. This reverts commit dad5caa59e6b2bde8d6cf5b64a972c393c526c82.
2021-04-12Revert "Reapply "[DebugInfo] Use variadic debug values to salvage BinOps and ↵Amy Huang1-17/+0
GEP instrs with non-const operands"" This change causes an assert / segmentation fault in LTO builds. This reverts commit f2e4f3eff3c9135d92840016f8ed4540cdd1313b.
2021-04-12Reapply "[DebugInfo] Use variadic debug values to salvage BinOps and GEP ↵Stephen Tozer1-0/+17
instrs with non-const operands" The causes of the previous build errors have been fixed in revisions aa3e78a59fdf3b211be72f1b3221af831665e67d, and 140757bfaaa00110a92d2247a910c847e6e3bcc8 This reverts commit f40976bd01032f4905dde361e709166704581077.
2021-04-06Move GCRelocateInst and GCResultInst to IntrinsicInst.h [nfc]Philip Reames1-0/+32
These two are part of the IntrinsicInst class hierarchy and it helps to cut down on some redundant includes.
2021-03-17Reapply "[DebugInfo] Handle multiple variable location operands in IR"Stephen Tozer1-0/+18
Fixed section of code that iterated through a SmallDenseMap and added instructions in each iteration, causing non-deterministic code; replaced SmallDenseMap with MapVector to prevent non-determinism. This reverts commit 01ac6d1587e8613ba4278786e8341f8b492ac941.
2021-03-17Revert "[DebugInfo] Handle multiple variable location operands in IR"Hans Wennborg1-18/+0
This caused non-deterministic compiler output; see comment on the code review. > This patch updates the various IR passes to correctly handle dbg.values with a > DIArgList location. This patch does not actually allow DIArgLists to be produced > by salvageDebugInfo, and it does not affect any pass after codegen-prepare. > Other than that, it should cover every IR pass. > > Most of the changes simply extend code that operated on a single debug value to > operate on the list of debug values in the style of any_of, all_of, for_each, > etc. Instances of setOperand(0, ...) have been replaced with with > replaceVariableLocationOp, which takes the value that is being replaced as an > additional argument. In places where this value isn't readily available, we have > to track the old value through to the point where it gets replaced. > > Differential Revision: https://reviews.llvm.org/D88232 This reverts commit df69c69427dea7f5b3b3a4d4564bc77b0926ec88.
2021-03-11Revert "[DebugInfo] Use variadic debug values to salvage BinOps and GEP ↵Stephen Tozer1-17/+0
instrs with non-const operands" This reverts commit c0f3dfb9f119bb5f22dd8846f5502b6abaf026d3. Reverted due to an error on the clang-x64-windows-msvc buildbot.
2021-03-11[DebugInfo] Use variadic debug values to salvage BinOps and GEP instrs with ↵gbtozers1-0/+17
non-const operands This patch improves salvageDebugInfoImpl by allowing it to salvage arithmetic operations with two or more non-const operands; this includes the GetElementPtr instruction, and most Binary Operator instructions. These salvages produce DIArgList locations and are only valid for dbg.values, as currently variadic DIExpressions must use DW_OP_stack_value. This functionality is also only added for salvageDebugInfoForDbgValues; other functions that directly call salvageDebugInfoImpl (such as in ISel or Coroutine frame building) can be updated in a later patch. Differential Revision: https://reviews.llvm.org/D91722
2021-03-09[DebugInfo] Handle multiple variable location operands in IRgbtozers1-0/+18
This patch updates the various IR passes to correctly handle dbg.values with a DIArgList location. This patch does not actually allow DIArgLists to be produced by salvageDebugInfo, and it does not affect any pass after codegen-prepare. Other than that, it should cover every IR pass. Most of the changes simply extend code that operated on a single debug value to operate on the list of debug values in the style of any_of, all_of, for_each, etc. Instances of setOperand(0, ...) have been replaced with with replaceVariableLocationOp, which takes the value that is being replaced as an additional argument. In places where this value isn't readily available, we have to track the old value through to the point where it gets replaced. Differential Revision: https://reviews.llvm.org/D88232
2021-03-08[DebugInfo] Support DIArgList in DbgVariableIntrinsicgbtozers1-9/+56
This patch updates DbgVariableIntrinsics to support use of a DIArgList for the location operand, resulting in a significant change to its interface. This patch does not update all IR passes to support multiple location operands in a dbg.value; the only change is to update the DbgVariableIntrinsic interface and its uses. All code outside of the intrinsic classes assumes that an intrinsic will always have exactly one location operand; they will still support DIArgLists, but only if they contain exactly one Value. Among other changes, the setOperand and setArgOperand functions in DbgVariableIntrinsic have been made private. This is to prevent code from setting the operands of these intrinsics directly, which could easily result in incorrect/invalid operands being set. This does not prevent these functions from being called on a debug intrinsic at all, as they can still be called on any CallInst pointer; it is assumed that any code directly setting the operands on a generic call instruction is doing so safely. The intention for making these functions private is to prevent DIArgLists from being overwritten by code that's naively trying to replace one of the Values it points to, and also to fail fast if a DbgVariableIntrinsic is updated to use a DIArgList without a valid corresponding DIExpression.
2020-12-09[VP] Build VP SDNodesSimon Moll1-11/+12
Translate VP intrinsics to VP_* SDNodes. The tests check whether a matching vp_* SDNode is emitted. Reviewed By: craig.topper Differential Revision: https://reviews.llvm.org/D91441
2020-11-16[VP][NFC] Rename to HANDLE_VP_TO_OPCSimon Moll1-6/+6
Use the less surprising shorthand OPC instead of OC.
2020-08-28[SVE] Make ElementCount members privateDavid Sherwood1-5/+5
This patch changes ElementCount so that the Min and Scalable members are now private and can only be accessed via the get functions getKnownMinValue() and isScalable(). In addition I've added some other member functions for more commonly used operations. Hopefully this makes the class more useful and will reduce the need for calling getKnownMinValue(). Differential Revision: https://reviews.llvm.org/D86065
2020-06-04[VP][Fix] canIgnoreVectorLength for scalable typesSimon Moll1-9/+4
This patch fixes VPIntrinsic::canIgnoreVectorLength when used on a VPIntrinsic with scalable vector types. Also includes new unittest cases for the '<vscale x 1 x whatever>' and '%evl == vscale' corner cases.
2020-04-15[NFC] clang-format IntrinsicInst.h|cppSimon Moll1-51/+49
Differential Revision: https://reviews.llvm.org/D78188
2020-04-09[FPEnv] Use single enum to represent rounding modeSerge Pavlov1-1/+1
Now compiler defines 5 sets of constants to represent rounding mode. These are: 1. `llvm::APFloatBase::roundingMode`. It specifies all 5 rounding modes defined by IEEE-754 and is used in `APFloat` implementation. 2. `clang::LangOptions::FPRoundingModeKind`. It specifies 4 of 5 IEEE-754 rounding modes and a special value for dynamic rounding mode. It is used in clang frontend. 3. `llvm::fp::RoundingMode`. Defines the same values as `clang::LangOptions::FPRoundingModeKind` but in different order. It is used to specify rounding mode in in IR and functions that operate IR. 4. Rounding mode representation used by `FLT_ROUNDS` (C11, 5.2.4.2.2p7). Besides constants for rounding mode it also uses a special value to indicate error. It is convenient to use in intrinsic functions, as it represents platform-independent representation for rounding mode. In this role it is used in some pending patches. 5. Values like `FE_DOWNWARD` and other, which specify rounding mode in library calls `fesetround` and `fegetround`. Often they represent bits of some control register, so they are target-dependent. The same names (not values) and a special name `FE_DYNAMIC` are used in `#pragma STDC FENV_ROUND`. The first 4 sets of constants are target independent and could have the same numerical representation. It would simplify conversion between the representations. Also now `clang::LangOptions::FPRoundingModeKind` and `llvm::fp::RoundingMode` do not contain the value for IEEE-754 rounding direction `roundTiesToAway`, although it is supported natively on some targets. This change defines all the rounding mode type via one `llvm::RoundingMode`, which also contains rounding mode for IEEE rounding direction `roundTiesToAway`. Differential Revision: https://reviews.llvm.org/D77379
2020-03-19[VP,Integer,#1] Vector-predicated integer intrinsicsSimon Moll1-0/+136
Summary: This patch adds IR intrinsics for vector-predicated integer arithmetic. It is subpatch #1 of the [integer slice](https://reviews.llvm.org/D57504#1732277) of [LLVM-VP](https://reviews.llvm.org/D57504). LLVM-VP is a larger effort to bring native vector predication to LLVM. Reviewed By: andrew.w.kaylor Differential Revision: https://reviews.llvm.org/D69891
2020-01-27[FPEnv] Divide macro INSTRUCTION into INSTRUCTION and DAG_INSTRUCTION,Wang, Pengfei1-3/+3
and macro FUNCTION likewise. NFCI. Some functions like fmuladd don't really have a node, we should divide the declaration form those have node to avoid introducing fake nodes. Differential Revision: https://reviews.llvm.org/D72871
2019-12-07[FPEnv] Constrained FCmp intrinsicsUlrich Weigand1-0/+24
This adds support for constrained floating-point comparison intrinsics. Specifically, we add: declare <ty2> @llvm.experimental.constrained.fcmp(<type> <op1>, <type> <op2>, metadata <condition code>, metadata <exception behavior>) declare <ty2> @llvm.experimental.constrained.fcmps(<type> <op1>, <type> <op2>, metadata <condition code>, metadata <exception behavior>) The first variant implements an IEEE "quiet" comparison (i.e. we only get an invalid FP exception if either argument is a SNaN), while the second variant implements an IEEE "signaling" comparison (i.e. we get an invalid FP exception if either argument is any NaN). The condition code is implemented as a metadata string. The same set of predicates as for the fcmp instruction is supported (except for the "true" and "false" predicates). These new intrinsics are mapped by SelectionDAG codegen onto two new ISD opcodes, ISD::STRICT_FSETCC and ISD::STRICT_FSETCCS, again representing quiet vs. signaling comparison operations. Otherwise those nodes look like SETCC nodes, with an additional chain argument and result as usual for strict FP nodes. The patch includes support for the common legalization operations for those nodes. The patch also includes full SystemZ back-end support for the new ISD nodes, mapping them to all available SystemZ instruction to fully implement strict semantics (scalar and vector). Differential Revision: https://reviews.llvm.org/D69281
2019-11-20Move floating point related entities to namespace levelSerge Pavlov1-65/+2
This is recommit of commit e6584b2b7b2d, which was reverted in 30e7ee3c4bac together with af57dbf12e54. Original message is below. Enumerations that describe rounding mode and exception behavior were defined inside ConstrainedFPIntrinsic. It makes sense to use the same definitions to represent the same properties in other cases, not only in constrained intrinsics. It was however inconvenient as required to include constrained intrinsics definitions even if they were not needed. Also using long scope prefix reduced readability. This change moves these definitioins to the namespace llvm::fp. No functional changes. Differential Revision: https://reviews.llvm.org/D69552
2019-11-20[FEnv] File with properties of constrained intrinsicsSerge Pavlov1-25/+19
Summary In several places we need to enumerate all constrained intrinsics or IR nodes that should be represented by them. It is easy to miss some of the cases. To make working with these intrinsics more convenient and robust, this change introduces file containing definitions of all constrained intrinsics and some of their properties. This file can be included to generate constrained intrinsics processing code. Reviewers: kpn, andrew.w.kaylor, cameron.mcinally, uweigand Subscribers: hiraditya, llvm-commits Tags: #llvm Differential Revision: https://reviews.llvm.org/D69887