aboutsummaryrefslogtreecommitdiff
path: root/llvm/lib/IR/Function.cpp
AgeCommit message (Collapse)AuthorFilesLines
2024-03-20[ValueTracking] Handle range attributes (#85143)Andreas Jonson1-0/+8
Handle the range attribute in ValueTracking.
2024-03-12[InstSimpliy] Use range attribute to simplify comparisons (#84627)Andreas Jonson1-0/+4
Use the new range attribute from https://github.com/llvm/llvm-project/pull/84617 to simplify comparisons where both sides have range information.
2024-02-20[DebugInfo][RemoveDIs] Set new-dbg-info flag from Modules correctly (#82373)Jeremy Morse1-1/+3
It turns out there's a pathway for Functions to be inserted into modules without having the "New" debug-info flag set correctly, which this patch fixes. Sadly there isn't a Module::insert method to instrument out there, everyone touches the list directly. This fix exposes a path where such functions are produced in the outliner in the wrong mode; requiring a fix there to correctly drop RemoveDIs-mode debug-info. This is covered by test/DebugInfo/AArch64/ir-outliner.ll
2024-02-08[HLSL][SPIR-V] Add create.handle intrinsic (#81038)Natalie Chouinard1-0/+1
Add a SPIR-V target-specific intrinsic for creating handles, which is used for lowering HLSL resources types like RWBuffer. `llvm/lib/TargetParser/Triple.cpp`: SPIR-V intrinsics use "spv" as the target prefix, not "spirv". As far as I can tell, this is the first one that is used via the `CGBuiltin` codepath, which relies on `getArchTypePrefix`, so I've corrected it here. `clang/lib/Basic/Targets/SPIR.h`: When records are laid out in the lowering from AST to IR, they were incorrectly offset because these Pointer attributes were defaulting to 32. Related to #81036
2024-02-05Revert "[IR] Use range-based for loops (NFC)"Shubham Sandeep Rastogi1-3/+4
This reverts commit e8512786fedbfa6ddba70ceddc29d7122173ba5e. This revert is done because llvm::drop_begin over an empty ArrayRef doesn't return an empty range, and therefore can lead to an invalid address returned instead. See discussion in https://github.com/llvm/llvm-project/pull/80737 for more context.
2024-01-31[IR] Use range-based for loops (NFC)Kazu Hirata1-4/+3
2024-01-26Revert "[DebugInfo][RemoveDIs] Don't pointlessly scan funcs for debug-info ↵Jeremy Morse1-4/+2
(#79327)" This reverts commit c23608b8d58bdeb0134d99168e6d0335da2c8366. It looks like this depends on #79345, which isn't going to land today, so revert for now.
2024-01-26[DebugInfo][RemoveDIs] Don't pointlessly scan funcs for debug-info (#79327)Jeremy Morse1-2/+4
The utility functions this patch modifies are part of cleanly transitioning from a context where we use dbg.value intrinsics to one where we use DPValue objects to record debug-info, and back again. However, this is a waste of time in non-debug builds (i.e. no -g on the command line). We still have to call the function on all blocks though to set the IsNewDbgInfoFormat flag. To reduce the overhead of this, test whether there's any debug-info in the function by checking whether the function has a DISubprogram, and pass a flag down to the utility functions indicating whether they can skip the scan. It feels a bit dumb to me now that we're scanning and setting a flag in a load of blocks when we don't have to -- however it's been really valuable during development for working out where spurious dbg.value intrinsics leak into a RemoveDIs context. Happily we'll be able to just delete this flag entirely when RemoveDIs lands and sticks, and the conversion routines will eventually be pushed down into the debug-info autoupgrade path.
2023-12-11[llvm] Use StringRef::{starts,ends}_with (NFC) (#74956)Kazu Hirata1-3/+3
This patch replaces uses of StringRef::{starts,ends}with with StringRef::{starts,ends}_with for consistency with std::{string,string_view}::{starts,ends}_with in C++20. I'm planning to deprecate and eventually remove StringRef::{starts,ends}with.
2023-11-22[IR][TLI] Cache getLibFunc() result on Function (NFC) (#72867)Nikita Popov1-1/+2
Cache the result of the TLI libfunc lookup in the Function object. This only caches the actual lookup of the LibFunc in the TLI map, but not the prototype validation, as that might differ between different TLI instances. This uses the existing mechanism for invalidating the intrinsic ID when the function name changes. The libfunc will be invalidated in that case as well. I don't believe this increases the size of Function on 64bit (which currently has a trailing `bool` member), and I don't think we would particularly care if it did, as Functions are uncommon as Values go.
2023-11-08Reapply 7d77bbef4ad92, adding new debug-info classesJeremy Morse1-1/+22
This reverts commit 957efa4ce4f0391147cec62746e997226ee2b836. Original commit message below -- in this follow up, I've shifted un-necessary inclusions of DebugProgramInstruction.h into being forward declarations (fixes clang-compile time I hope), and a memory leak in the DebugInfoTest.cpp IR unittests. I also tracked a compile-time regression in D154080, more explanation there, but the result of which is hiding some of the changes behind the EXPERIMENTAL_DEBUGINFO_ITERATORS compile-time flag. This is tested by the "new-debug-iterators" buildbot. [DebugInfo][RemoveDIs] Add prototype storage classes for "new" debug-info This patch adds a variety of classes needed to record variable location debug-info without using the existing intrinsic approach, see the rationale at [0]. The two added files and corresponding unit tests are the majority of the plumbing required for this, but at this point isn't accessible from the rest of LLVM as we need to stage it into the repo gently. An overview is that classes are added for recording variable information attached to Real (TM) instructions, in the form of DPValues and DPMarker objects. The metadata-uses of DPValues is plumbed into the metadata hierachy, and a field added to class Instruction, which are all stimulated in the unit tests. The next few patches in this series add utilities to convert to/from this new debug-info format and add instruction/block utilities to have debug-info automatically updated in the background when various operations occur. This patch was reviewed in Phab in D153990 and D154080, I've squashed them together into this commit as there are dependencies between the two patches, and there's little profit in landing them separately. [0] https://discourse.llvm.org/t/rfc-instruction-api-changes-needed-to-eliminate-debug-intrinsics-from-ir/68939
2023-11-02Revert "[DebugInfo][RemoveDIs] Add prototype storage classes for "new" ↵Jeremy Morse1-22/+1
debug-info" And some intervening fixups. There are two remaining problems: * A memory leak via https://lab.llvm.org/buildbot/#/builders/236/builds/7120/steps/10/logs/stdio * A performance slowdown with -g where I'm not completely sure what the cause it These might be fairly straightforwards to fix, but it's the end of the day hear, so I figure I'll clear the buildbots til tomorrow. This reverts commit 7d77bbef4ad9230f6f427649373fe46a668aa909. This reverts commit 9026f35afe6ffdc5e55b6615efcbd36f25b11558. This reverts commit d97b2b389a0e511c65af6845119eb08b8a2cb473.
2023-11-02[DebugInfo][RemoveDIs] Add prototype storage classes for "new" debug-infoJeremy Morse1-1/+22
This patch adds a variety of classes needed to record variable location debug-info without using the existing intrinsic approach, see the rationale at [0]. The two added files and corresponding unit tests are the majority of the plumbing required for this, but at this point isn't accessible from the rest of LLVM as we need to stage it into the repo gently. An overview is that classes are added for recording variable information attached to Real (TM) instructions, in the form of DPValues and DPMarker objects. The metadata-uses of DPValues is plumbed into the metadata hierachy, and a field added to class Instruction, which are all stimulated in the unit tests. The next few patches in this series add utilities to convert to/from this new debug-info format and add instruction/block utilities to have debug-info automatically updated in the background when various operations occur. This patch was reviewed in Phab in D153990 and D154080, I've squashed them together into this commit as there are dependencies between the two patches, and there's little profit in landing them separately. [0] https://discourse.llvm.org/t/rfc-instruction-api-changes-needed-to-eliminate-debug-intrinsics-from-ir/68939
2023-09-20[IR] Fix a memory leak if Function::dropAllReferences() is followed by ↵Liqiang Tao1-12/+12
setHungoffOperand This patch fixes a memory leak if Function::dropAllReferences() is followed by setHungoffOperand (e.g. setPersonality) If NumUserOperands changes from 3 to 0 before calling allocHungoffUselist() to allocate memory, the memory leaks which are allocated when NumUserOperands is changed from 0 to 3. e.g. ``` llvm::Function* func = ...; func->setPersonalityFn(foo); // (1). call allocHungoffUselist() to allocate memory for uses func->deleteBody(); // (2). call dropAllReferences(), and it changes NumUserOperands from 3 to 0 // (3). at this point, NumUserOperands is 0, the next line will allocate memory by allocHungoffUselist() func->setPersonalityFn(bar); // (4). call allocHungoffUselist(), so memory allocated in (1) leaks. ``` Reviewed By: dexonsmith, MaskRay Differential Revision: https://reviews.llvm.org/D156618
2023-08-31[Core] Allow `hasAddressTaken` to ignore "casted direct calls"Johannes Doerfert1-2/+4
A direct call to a function casted to a different type is still not really an address taken event. We allow the user to opt out of these now. Reviewed By: arsenm Differential Revision: https://reviews.llvm.org/D159149
2023-08-09[Clang][LoongArch] Use the ClangBuiltin class to automatically generate ↵wanglei1-0/+1
support for CBE and CFE Fixed the type modifier (L->W), removed redundant feature checking code since the feature has already been checked in `EmitBuiltinExpr`. And Cleaned up unused diagnostic information. Reviewed By: SixWeining Differential Revision: https://reviews.llvm.org/D156866
2023-08-02Stop using legacy helpers indicating typed pointer types. NFCBjorn Pettersson1-3/+2
Since we no longer support typed LLVM IR pointer types, the code can be simplified into for example using PointerType::get directly instead of using Type::getInt8PtrTy and Type::getInt32PtrTy etc. Differential Revision: https://reviews.llvm.org/D156733
2023-07-18[llvm] Remove uses of isOpaqueOrPointeeTypeEquals() (NFC)Nikita Popov1-6/+1
2023-07-14[llvm] Remove uses of getNonOpaquePointerElementType() (NFC)Nikita Popov1-5/+0
2023-07-14[IR] Remove LLVMPointerToElt and LLVMAnyPointerToElt intrinsic types (NFC)Nikita Popov1-59/+0
With opaque pointers, LLVMPointerToElt can be replaced by llvm_ptr_ty and LLVMAnyPointerToElt by llvm_anyptr_ty. This still leaves LLVMVectorOfAnyPointersToElt, where we can't just replace with an existing IIT descriptor. Differential Revision: https://reviews.llvm.org/D155167
2023-07-13[IR] Remove LLVMPointerTo intrinsic type (NFC)Nikita Popov1-18/+0
With opaque pointers, this is equivalent to llvm_ptr_ty. However, this particular type was actually completely unused.
2023-07-13[IR] Partially remove pointer element types from intrinsic signatures (NFC)Nikita Popov1-35/+3
As typed pointers are no longer supported, we should no longer specify element types in intrinsic signatures. The only meaningful pointer types are now: llvm_ptr_ty -> ptr llvm_anyptr_ty -> ptr addrspace(any) LLVMQualPointerType<N> -> ptr addrspace(N) This is only "partially" because we also have a bunch of special IIT descriptors like LLVMPointerTo, LLVMPointerToElt and LLVMAnyPointerToElt, which I'll leave for a later revision. Differential Revision: https://reviews.llvm.org/D155086
2023-05-12[AArch64][SME2/SVE2p1] Add predicate-as-counter intrinsics for ptrue/cntpSander de Smalen1-0/+8
These intrinsics are used to implement: * svptrue_c8(), svptrue_c16(), etc. * svcntp_c8(svcount_t pnn, uint64_t vl), svcntp_c16(...), etc. As described in https://github.com/ARM-software/acle/pull/217 Reviewed By: david-arm Differential Revision: https://reviews.llvm.org/D150263
2023-04-29LangRef: Add "dynamic" option to "denormal-fp-math"Matt Arsenault1-6/+19
This is stricter than the default "ieee", and should probably be the default. This patch leaves the default alone. I can change this in a future patch. There are non-reversible transforms I would like to perform which are legal under IEEE denormal handling, but illegal with flushing zero behavior. Namely, conversions between llvm.is.fpclass and fcmp with zeroes. Under "ieee" handling, it is legal to translate between llvm.is.fpclass(x, fcZero) and fcmp x, 0. Under "preserve-sign" handling, it is legal to translate between llvm.is.fpclass(x, fcSubnormal|fcZero) and fcmp x, 0. I would like to compile and distribute some math library functions in a mode where it's callable from code with and without denormals enabled, which requires not changing the compares with denormals or zeroes. If an IEEE function transforms an llvm.is.fpclass call into an fcmp 0, it is no longer possible to call the function from code with denormals enabled, or write an optimization to move the function into a denormal flushing mode. For the original function, if x was a denormal, the class would evaluate to false. If the function compiled with denormal handling was converted to or called from a preserve-sign function, the fcmp now evaluates to true. This could also be of use for strictfp handling, where code may be changing the denormal mode. Alternative name could be "unknown". Replaces the old AMDGPU custom inlining logic with more conservative logic which tries to permit inlining for callees with dynamic handling and avoids inlining other mismatched modes.
2023-04-25Migrate `IIT_Info` into `Intrinsics.td`NAKAMURA Takumi1-63/+4
- Define `IIT_Info` in `Intrinsics.td` - Implement `EmitIITInfo` in `IntrinsicEmitter.cpp` - Use generated `IIT_Info` in `Function.cpp` Depends on D145873 and D146179 Differential Revision: https://reviews.llvm.org/D146914
2023-02-24IR: Add nofpclass parameter attributeMatt Arsenault1-0/+4
This carries a bitmask indicating forbidden floating-point value kinds in the argument or return value. This will enable interprocedural -ffinite-math-only optimizations. This is primarily to cover the no-nans and no-infinities cases, but also covers the other floating point classes for free. Textually, this provides a number of names corresponding to bits in FPClassTest, e.g. call nofpclass(nan inf) @must_be_finite() call nofpclass(snan) @cannot_be_snan() This is more expressive than the existing nnan and ninf fast math flags. As an added bonus, you can represent fun things like nanf: declare nofpclass(inf zero sub norm) float @only_nans() Compared to nnan/ninf: - Can be applied to individual call operands as well as the return value - Can distinguish signaling and quiet nans - Distinguishes the sign of infinities - Can be safely propagated since it doesn't imply anything about other operands. - Does not apply to FP instructions; it's not a flag This is one step closer to being able to retire "no-nans-fp-math" and "no-infs-fp-math". The one remaining situation where we have no way to represent no-nans/infs is for loads (if we wanted to solve this we could introduce !nofpclass metadata, following along with noundef/!noundef). This is to help simplify the GPU builtin math library distribution. Currently the library code has explicit finite math only checks, read from global constants the compiler driver needs to set based on the compiler flags during linking. We end up having to internalize the library into each translation unit in case different linked modules have different math flags. By propagating known-not-nan and known-not-infinity information, we can automatically prune the edge case handling in most functions if the function is only reached from fast math uses.
2023-01-13[NFC] Remove Function::getParamAlignmentGuillaume Chatelet1-5/+0
Differential Revision: https://reviews.llvm.org/D141696
2023-01-10[CallGraph][FIX] Ensure generic intrinsics are represented in the CGJohannes Doerfert1-12/+0
Intrinsics have historically been excluded from the call graph with an exception of 3 special ones added at some point. This meant that passes depending on the call graph needed to handle intrinsics explicitly as the underlying assumption, namely that intrinsics can't call or modify things, doesn't hold. We are slowly moving away from special handling of intrinsics, or at least towards explicitly checking what intrinsics we want to handle differently. This patch: - Includes most intrinsics in the call graph. Debug intrinsics are still excluded. - Removes the special handling of intrinsics in the GlobalsAA pass. - Removes the `IntrinsicInst::isLeaf` method. Properly Fixes: https://github.com/llvm/llvm-project/issues/52706 See also: https://discourse.llvm.org/t/intrinsics-are-not-special-stop-pretending-i-mean-it/67545 Differential Revision: https://reviews.llvm.org/D14119
2023-01-05Move from llvm::makeArrayRef to ArrayRef deduction guides - llvm/ partserge-sans-paille1-1/+1
Use deduction guides instead of helper functions. The only non-automatic changes have been: 1. ArrayRef(some_uint8_pointer, 0) needs to be changed into ArrayRef(some_uint8_pointer, (size_t)0) to avoid an ambiguous call with ArrayRef((uint8_t*), (uint8_t*)) 2. CVSymbol sym(makeArrayRef(symStorage)); needed to be rewritten as CVSymbol sym{ArrayRef(symStorage)}; otherwise the compiler is confused and thinks we have a (bad) function prototype. There was a few similar situation across the codebase. 3. ADL doesn't seem to work the same for deduction-guides and functions, so at some point the llvm namespace must be explicitly stated. 4. The "reference mode" of makeArrayRef(ArrayRef<T> &) that acts as no-op is not supported (a constructor cannot achieve that). Per reviewers' comment, some useless makeArrayRef have been removed in the process. This is a follow-up to https://reviews.llvm.org/D140896 that introduced the deduction guides. Differential Revision: https://reviews.llvm.org/D140955
2022-12-20[IR] Add a target extension type to LLVM.Joshua Cranmer1-0/+9
Target-extension types represent types that need to be preserved through optimization, but otherwise are not introspectable by target-independent optimizations. This patch doesn't add any uses of these types by an existing backend, it only provides basic infrastructure such that these types would work correctly. Reviewed By: nikic, barannikov88 Differential Revision: https://reviews.llvm.org/D135202
2022-12-16Function: Respect IgnoreLLVMUsed with addrspacecasted functionsMatt Arsenault1-7/+4
Try to respect IgnoreLLVMUsed if the function was addrspacecasted to match llvm.used's type.
2022-12-14[IR] Adds Function::erase() for erasing a range of basic blocksVasileios Porpodas1-0/+5
This is part of a series of patches that aim at making Function::getBasicBlockList() private. Differential Revision: https://reviews.llvm.org/D140064
2022-12-14Fixes EXPENSIVE_CHECKS build failure caused by ↵Vasileios Porpodas1-1/+1
7b684119abc7d94bad47ec0b97b35598fac412d3
2022-12-14[IR] Adds Function::splice() member functionsVasileios Porpodas1-0/+12
This is part of a series of patches that aim at making Function::getBasicBlockList() private. Differential Revision: https://reviews.llvm.org/D139982
2022-12-14Attributes: Add function getter to parse integer string attributesMatt Arsenault1-0/+13
The most common case for string attributes parses them as integers. We don't have a convenient way to do this, and as a result we have inconsistent missing attribute and invalid attribute handling scattered around. We also have inconsistent radix usage to getAsInteger; some places use the default 0 and others use base 10. Update a few of the uses, but there are quite a lot of these.
2022-12-10Don't include None.h (NFC)Kazu Hirata1-1/+0
I've converted all known uses of None to std::nullopt, so we no longer need to include None.h. This is part of an effort to migrate from llvm::Optional to std::optional: https://discourse.llvm.org/t/deprecating-llvm-optional-x-hasvalue-getvalue-getvalueor/63716
2022-12-05CallGraph: Fix IgnoreAssumeLikeCalls option to Function::hasAddressTakenMatt Arsenault1-10/+19
This was added in 29e2d9461a91b and likely never worked in a useful way. The test added for it fails when converted to opaque pointers, since the lifetime intrinsic now directly uses the address. The code was only trying to handle a user indirectly through a bitcast instruction. That would never have been useful; a bitcast of a global value would be folded to a ConstantExpr cast. I also don't understand why it was special casing use_empty on the cast. Relax the check to be either BitCastOperator or AddrSpaceCastOperator. In practice, BitCastOperator won't appear today. I believe the change in parallel_deletion_cg_update is a correct improvement but I didn't fully follow it. .omp_outlined..0 is used in a constant expression cast to a call which ends up getting deleted.
2022-12-05[IR] llvm::Optional => std::optionalFangrui Song1-3/+3
Many llvm/IR/* files have been migrated by other contributors. This migrates most remaining files.
2022-12-02[IR] Use std::nullopt instead of None (NFC)Kazu Hirata1-5/+5
This patch mechanically replaces None with std::nullopt where the compiler would warn if None were deprecated. The intent is to reduce the amount of manual work required in migrating from Optional to std::optional. This is part of an effort to migrate from llvm::Optional to std::optional: https://discourse.llvm.org/t/deprecating-llvm-optional-x-hasvalue-getvalue-getvalueor/63716
2022-11-14[TableGen] Use MemoryEffects to represent intrinsic memory effects (NFCI)Nikita Popov1-1/+1
The TableGen implementation was using a homegrown implementation of FunctionModRefInfo. This switches it to use MemoryEffects instead. This makes the code simpler, and will allow exposing the full representational power of MemoryEffects in the future. Among other things, this will allow us to map IntrHasSideEffects to an inaccessiblemem readwrite, rather than just ignoring it entirely in most cases. To avoid layering issues, this moves the ModRef.h header from IR to Support, so that it can be included in the TableGen layer. Differential Revision: https://reviews.llvm.org/D137641
2022-11-04[IR] Switch everything to use memory attributeNikita Popov1-0/+60
This switches everything to use the memory attribute proposed in https://discourse.llvm.org/t/rfc-unify-memory-effect-attributes/65579. The old argmemonly, inaccessiblememonly and inaccessiblemem_or_argmemonly attributes are dropped. The readnone, readonly and writeonly attributes are restricted to parameters only. The old attributes are auto-upgraded both in bitcode and IR. The bitcode upgrade is a policy requirement that has to be retained indefinitely. The IR upgrade is mainly there so it's not necessary to update all tests using memory attributes in this patch, which is already large enough. We could drop that part after migrating tests, or retain it longer term, to make it easier to import IR from older LLVM versions. High-level Function/CallBase APIs like doesNotAccessMemory() or setDoesNotAccessMemory() are mapped transparently to the memory attribute. Code that directly manipulates attributes (e.g. via AttributeList) on the other hand needs to switch to working with the memory attribute instead. Differential Revision: https://reviews.llvm.org/D135780
2022-08-28[llvm] Qualify auto in range-based for loops (NFC)Kazu Hirata1-2/+2
2022-08-08[llvm] LLVM_FALLTHROUGH => [[fallthrough]]. NFCFangrui Song1-7/+7
With C++17 there is no Clang pedantic warning or MSVC C5051.
2022-07-29[IR] Simplify Intrinsic::getDeclaration. NFC.Jay Foad1-3/+2
2022-07-14[clang][CodeGen] add fn_ret_thunk_extern to synthetic fnsNick Desaulniers1-0/+2
Follow up fix to commit 2240d72f15f3 ("[X86] initial -mfunction-return=thunk-extern support") https://reviews.llvm.org/D129572 @nathanchance reported that -mfunction-return=thunk-extern was failing to annotate the asan and tsan contructors. https://lore.kernel.org/llvm/Ys7pLq+tQk5xEa%2FB@dev-arch.thelio-3990X/ I then noticed the same occurring for gcov synthetic functions. Similar to commit 2786e67 ("[IR][sanitizer] Add module flag "frame-pointer" and set it for cc1 -mframe-pointer={non-leaf,all}") define a new module level MetaData, "fn_ret_thunk_extern", then when set adds the fn_ret_thunk_extern IR Fn Attr to synthetically created Functions. Fixes https://github.com/llvm/llvm-project/issues/56514 Reviewed By: MaskRay Differential Revision: https://reviews.llvm.org/D129709
2022-07-01[DirectX] add thread/group id DXIL operations.Xiang Li1-0/+1
Add DXIL operation for thread/group id operations. ID Name Description 93 ThreadId reads the thread ID 94 GroupId reads the group ID (SV_GroupID) 95 ThreadIdInGroup reads the thread ID within the group (SV_GroupThreadID) 96 FlattenedThreadIdInGroup provides a flattened index for a given thread within a given group (SV_GroupIndex) Also add llvm intrinsic which map to these intrinsics to DXIL operation. Reviewed By: beanz Differential Revision: https://reviews.llvm.org/D127990
2022-06-22Rename GCCBuiltin into ClangBuiltinGuillaume Gomez1-3/+3
This patch is needed because developers expect "GCCBuiltin" items to be the GCC intrinsics equivalent and not the Clang internals. Reviewed By: #libc_abi, RKSimon, xbolva00 Differential Revision: https://reviews.llvm.org/D127460
2022-06-20Don't use Optional::hasValue (NFC)Kazu Hirata1-1/+1
2022-06-02[ValueTypes] Define MVTs for v128i2/v64i4 as well as i2 and i4.Hendrik Greving1-19/+27
Adds MVT::v128i2, MVT::v64i4, and implied MVT::i2, MVT::i4. Keeps MVT::i2, MVT::i4 lowering actions as expand, which should be removed once targets set this explicitly. Adjusts 11 lit tests to reflect slightly different behavior during DAG combine. Differential Revision: https://reviews.llvm.org/D125247
2022-06-01Revert "[ValueTypes] Define MVTs for v128i2/v64i4 as well as i2 and i4."Hendrik Greving1-27/+19
This reverts commit 430ac5c3029c52e391e584c6d4447e6e361fae99. Due to failures in Clang tests. Differential Revision: https://reviews.llvm.org/D125247