- Oct 23, 2020
-
-
Paul C. Anagnostopoulos authored
Differential Revision: https://reviews.llvm.org/D89962
-
Vedant Kumar authored
When InstCombine removes an alloca, it erases the dbg.{addr,declare} instructions which refer to the alloca. It would be better to instead remove all debug intrinsics which describe the contents of the dead alloca, namely all dbg.value(<dead alloca>, ..., DW_OP_deref)'s. This effectively undoes work performed in an InstCombine run earlier in the pipeline by LowerDbgDeclare, which inserts DW_OP_deref dbg.values before CallInst users of an alloca. The motivating example looks like: ``` define void @foo(i32 %0) { %a = alloca i32 ; This alloca is erased. store i32 %0, i32* %a dbg.value(i32 %0, "arg0") ; This dbg.value survives. dbg.value(i32* %a, "arg0", DW_OP_deref) call void @trivially_inlinable_no_op(i32* %a) ret void } ``` If the DW_OP_deref dbg.value is not erased, it becomes dbg.value(undef) after inlining, making "arg0" unavailable. But we already have dbg.value descriptions of the alloca's value (from LowerDbgDeclare), so the DW_OP_deref dbg.value cannot serve its purpose of describing an initialization of the alloca by some callee. It invalidates other useful dbg.values, causing large gaps in location coverage, so we should delete it (even though doing so may cause stale dbg.values to appear, if there's a dead store to `%a` in @trivially_inlinable_no_op). OTOH, it wouldn't be correct to delete all dbg.value descriptions of an alloca. Note that it's possible to describe a variable that takes on different pointer values, e.g.: ``` void use(int *); void t(int a, int b) { int *local = &a; // dbg.value(i32* %a.addr, "local") local = &b; // dbg.value(i32* undef, "local") use(&a); // (note: %b.addr is optimized out) local = &a; // dbg.value(i32* %a.addr, "local") } ``` In this example, the alloca for "b" is erased, but we need to describe the value of "local" as <unavailable> before the call to "use". This prevents "local" from appearing to be equal to "&a" at the callsite. rdar://66592859 Differential Revision: https://reviews.llvm.org/D85555 -
Matt Arsenault authored
Remove registers section and compact block/register numbers
-
Arthur Eubanks authored
This reverts commit 710676cf.
-
Fangrui Song authored
The ELF spec says > If the sh_flags field for this section header includes the attribute SHF_INFO_LINK, then this member represents a section header table index. Set SHF_INFO_LINK so that binary manipulation tools know that sh_info is a section header table index instead of (the number of local symbols in the case of SHT_SYMTAB/SHT_DYNSYM). We have already added SHF_INFO_LINK for --emit-relocs retained SHT_REL[A]. For example, we can teach llvm-objcopy to preserve the section index of the sh_info referenced section if SHF_INFO_LINK is set. (GNU objcopy recognizes .rel[a].plt and updates sh_info even if SHF_INFO_LINK is not set). Reviewed By: grimar, psmith Differential Revision: https://reviews.llvm.org/D89828
-
Raphael Isemann authored
This reverts commit 41185226. Causes TestQuoting to fail on Windows.
-
Nikita Popov authored
Non-instruction defs like arguments, constants or global values always dominate all instructions/uses inside the function. This case currently needs to be treated separately by the caller, see https://reviews.llvm.org/D89623#inline-832818 for an example. This patch makes the dominator tree APIs accept a Value instead of an Instruction and always returns true for the non-Instruction case. A complication here is that BasicBlocks are also Values. For that reason we can't support the dominates(Value *, BasicBlock *) variant, as it would conflict with dominates(BasicBlock *, BasicBlock *), which has different semantics. For the other two APIs we assert that the passed value is not a BasicBlock. Differential Revision: https://reviews.llvm.org/D89632
-
Florian Hahn authored
AArch64 does not have a flexible vector select instruction. In some cases, the selects can be turned into min/max however, for which there are dedicated vector instructions on AArch64. This patch adds some tests for such cases.
-
Tim Corringham authored
Add new loop metadata amdgpu.loop.unroll.threshold to allow the initial AMDGPU specific unroll threshold value to be specified on a loop by loop basis. The intention is to be able to to allow more nuanced hints, e.g. specifying a low threshold value to indicate that a loop may be unrolled if cheap enough rather than using the all or nothing llvm.loop.unroll.disable metadata. Differential Revision: https://reviews.llvm.org/D84779
-
Arthur Eubanks authored
Fixes $ ninja obj/build/rel/gen/clang-tools-extra/clangd/CompletionModel.CompletionModel.obj Some tablegen include files from clang/include/clang/AST and clang/include/clang/Sema need to be generated before CompletionModel is compiled. Reviewed By: thakis Differential Revision: https://reviews.llvm.org/D89657
-
Arthur Eubanks authored
In preparation for potential future concurrency, a FunctionPass shouldn't modify anything at the module level that other FunctionPasses can also modify. Reviewed By: asbirlea Differential Revision: https://reviews.llvm.org/D89890
-
Med Ismail Bennani authored
This patch completes https://reviews.llvm.org/D83560. Now that the compiler can emit `DW_OP_implicit_value` into DWARF expressions, lldb needed to learn reading these opcodes for variable inspection and expression evaluation. This implicit location descriptor specifies an immediate value with two operands: the length (ULEB128) followed by a block representing the value in the target memory representation. rdar://67406091 Differential revision: https://reviews.llvm.org/D89842 Signed-off-by:
Med Ismail Bennani <medismail.bennani@gmail.com>
-
Marco Antognini authored
Many non-language extensions are defined but also unused. This patch removes them with their tests as they do not require compiler support. The cl_khr_select_fprounding_mode extension is also removed because it has been deprecated since OpenCL 1.1 and Clang doesn't have any specific support for it. The cl_khr_context_abort extension is only referred to in "The OpenCL Specification", version 1.2 and 2.0, in Table 4.3, but no specification is provided in "The OpenCL Extension Specification" for these versions. Because it is both unused in Clang and lacks specification, this extension is removed. The following extensions are platform extensions that bring new OpenCL APIs but do not impact the kernel language nor require compiler support. They are therefore removed. - cl_khr_gl_sharing, introduced in OpenCL 1.0 - cl_khr_icd, introduced in OpenCL 1.2 - cl_khr_gl_event, introduced in OpenCL 1.1 Note: this extension adds a new API to create cl_event but it also specifies that these can only be used by clEnqueueAcquireGLObjects. Hence, they cannot be used on the device side and the extension does not impact the kernel language. - cl_khr_d3d10_sharing, introduced in OpenCL 1.1 - cl_khr_d3d11_sharing, introduced in OpenCL 1.2 - cl_khr_dx9_media_sharing, introduced in OpenCL 1.2 - cl_khr_image2d_from_buffer, introduced in OpenCL 1.2 - cl_khr_initialize_memory, introduced in OpenCL 1.2 - cl_khr_gl_depth_images, introduced in OpenCL 1.2 Note: this extension is related to cl_khr_depth_images but only the latter adds new features to the kernel language. - cl_khr_spir, introduced in OpenCL 1.2 - cl_khr_egl_event, introduced in OpenCL 1.2 Note: this extension adds a new API to create cl_event but it also specifies that these can only be used by clEnqueueAcquire* API functions. Hence, they cannot be used on the device side and the extension does not impact the kernel language. - cl_khr_egl_image, introduced in OpenCL 1.2 - cl_khr_terminate_context, introduced in OpenCL 1.2 The minimum required OpenCL version used in OpenCLExtensions.def for these extensions is not always correct. Removing these address that issue. Reviewed By: Anastasia Differential Revision: https://reviews.llvm.org/D89372
-
- Oct 22, 2020
-
-
Aaron En Ye Shi authored
The __ocml_*_rte_f32 and __ocml_*_rte_f64 functions are not available if OCML_BASIC_ROUNDED_OPERATIONS is not defined. Reviewed By: b-sumner, yaxunl Fixes: SWDEV-257235 Differential Revision: https://reviews.llvm.org/D89966
-
Mircea Trofin authored
Also updated the users of the APIs; and a drive-by small change to RDFRegister.cpp Differential Revision: https://reviews.llvm.org/D89912
-
Arthur Eubanks authored
It was already disabled under -Oz in buildFunctionSimplificationPipeline(), but not in buildModuleOptimizationPipeline()/addPGOInstrPasses(). Reviewed By: fhahn Differential Revision: https://reviews.llvm.org/D89927
-
Jonas Devlieghere authored
In a new Range class was introduced to simplify and the Disassembler API and reduce duplication. It unintentionally broke the SBFrame::Disassemble functionality because it unconditionally converts the number of instructions to a Range{Limit::Instructions, num_instructions}. This is subtly different from the previous behavior, where now we're passing a Range and assume it's valid in the callee, the original code would propagate num_instructions and the callee would compare the value and decided between disassembling instructions or bytes. Unfortunately the existing tests was not particularly strict: disassembly = frame.Disassemble() self.assertNotEqual(len(disassembly), 0, "Disassembly was empty.") This would pass because without this patch we'd disassemble zero instructions, resulting in an error: (lldb) script print(lldb.frame.Disassemble()) error: error reading data from section __text Differential revision: https://reviews.llvm.org/D89925 -
Eugene Zhulenev authored
pthreads is not enabled for all builds by default Reviewed By: jpienaar Differential Revision: https://reviews.llvm.org/D89967
-
Teresa Johnson authored
This will allow the output directory to be specified by a build time option, similar to the directory specified for regular PGO profiles via -fprofile-generate=. The memory profiling instrumentation pass will set up the variable. This is the same mechanism used by the PGO instrumentation and runtime. Depends on D87120 and D89629. Differential Revision: https://reviews.llvm.org/D89086
-
Christian Sigg authored
Reviewed By: herhut Differential Revision: https://reviews.llvm.org/D89929
-
Piotr Sobczak authored
This commit marks i16 MULH as expand in AMDGPU backend, which is necessary after the refactoring in D80485. Differential Revision: https://reviews.llvm.org/D89965
-
Florian Hahn authored
-
Evgeny Leviant authored
Differential revision: https://reviews.llvm.org/D89939
-
Simon Pilgrim authored
Reported by cppcheck
-
Simon Pilgrim authored
Avoid unnecessary copy in X86AsmParser::ParseIntelOperand
-
Jeremy Morse authored
Both FastRegAlloc and LiveDebugVariables/greedy need to cope with DBG_INSTR_REFs. None of them actually need to take any action, other than passing DBG_INSTR_REFs through: variable location information doesn't refer to any registers at this stage. LiveDebugVariables stashes the instruction information in a tuple, then re-creates it later. This is only necessary as the register allocator doesn't expect to see any debug instructions while it's working. No equivalence classes or interval splitting is required at all! No changes are needed for the fast register allocator, as it just ignores debug instructions. The test added checks that both of them preserve DBG_INSTR_REFs. This also expands ScheduleDAGInstrs.cpp to treat DBG_INSTR_REFs the same as DBG_VALUEs when rescheduling instructions around. The current movement of DBG_VALUEs around is less than ideal, but it's not a regression to make DBG_INSTR_REFs subject to the same movement. Differential Revision: https://reviews.llvm.org/D85757
-
Florian Hahn authored
-
Raphael Isemann authored
This test checks that the output of `SBTarget.GetDescription()` contains the substrings `'a.out', 'Target', 'Module', 'Breakpoint'` in that order. This test is currently failing on Apple simulators as apparently 'Module' can't be found in the output after 'Target". The reason for that is that the actual output of `SBTarget.GetDescription()` looks like this: ``` Target Module /build/path/lldb-test-build.noindex/python_api/target/TestTargetAPI.test_get_description_dwarf/a.out 0x7ff2b6d3f990: ObjectFileMachO64, file = /build/path/lldb-test-build.noindex/python_api/target/TestTargetAPI.test_get_description [...] 0x7ff307150000: BreakpointList with 0 Breakpoints: <LLDB module output repeats for each loaded module> ``` Clearly the string order should be `'Target', 'Module', 'a.out', 'Breakpoint'`. However, LLDB is also a bunch of system shared libraries (libxpc.dylib, libobjc.A.dylib, etc.) when *not* running against a simulator, we end up unintentionally finding the `'Target', 'Module', 'Breakpoint'` substrings in the trailing descriptions of the system modules. When running against a simulator we however don't load shared system libraries. This patch just moves the substrings in the correct order to make this test pass without having any shared library modules in the description output. Reviewed By: JDevlieghere Differential Revision: https://reviews.llvm.org/D89698
-
Matt Arsenault authored
The VGPRs used for SGPR spills need to be reserved, even if we aren't speculatively reserving one. This was broken by 117e5609.
-
Matt Arsenault authored
We don't support funclets for exception handling and I hit this when manually reducing MIR.
-
Matt Arsenault authored
If the end instruction of the scheduling region was a DBG_VALUE, the uses of the debug instruction were tracked as if they were real uses. This would then hit the deadDefHasNoUse assertion in addVRegDefDeps if the only use was the debug instruction.
-
Jeremy Morse authored
The instruction referencing work currently only works on X86, and all the tests for it will be X86 based for the time being. Configure the whole directory to be X86-only, seeing how I keep on landing tests that don't have the correct REQUIRES lines.
-
Jon Chesterfield authored
[OpenMP] Emit calls to int64_t functions for amdgcn Two functions, syncwarp and active_thread_mask, return lanemask_t. Currently this is assumed to be int32, which is true for nvptx. Patch makes the type target architecture dependent. Reviewed By: jdoerfert Differential Revision: https://reviews.llvm.org/D89746
-
Paul C. Anagnostopoulos authored
Differential Revision: https://reviews.llvm.org/D89901
-
Eugene Zhulenev authored
Lower from Async dialect to LLVM by converting async regions attached to `async.execute` operations into LLVM coroutines (https://llvm.org/docs/Coroutines.html): 1. Outline all async regions to functions 2. Add LLVM coro intrinsics to mark coroutine begin/end 3. Use MLIR conversion framework to convert all remaining async types and ops to LLVM + Async runtime function calls All `async.await` operations inside async regions converted to coroutine suspension points. Await operation outside of a coroutine converted to the blocking wait operations. Implement simple runtime to support concurrent execution of coroutines. Reviewed By: herhut Differential Revision: https://reviews.llvm.org/D89292
-
Raphael Isemann authored
The Darwin builder currently assumes in `getArchCFlags` that the passed `arch` value is an actual string it can string.join with vendor/os/version/env strings: ``` triple = '-'.join([arch, vendor, os, version, env]) ``` However this is not true for most tests as we just pass down the `arch=None` default value from `TestBase.build`. This causes that if we actually end up in this function we just error out when concatenating `None` with the other actual strings of vendor/os/version/env. What we should do instead is check that if there is no test-specific architecture that we fall back to the configuration's architecture value. It seems we already worked around this in `builder.getArchSpec` by explicitly falling back to the architecture specified in the configuration. This patch just moves this fallback logic to the top `build` function so that it affects all functions called from `TestBase.build`. Reviewed By: JDevlieghere Differential Revision: https://reviews.llvm.org/D89056
-
Paul C. Anagnostopoulos authored
Differential Revision: https://reviews.llvm.org/D89893
-
Simon Pilgrim authored
Add the MVT equivalent handling for EVT changeTypeToInteger/changeVectorElementType/changeVectorElementTypeToInteger. All the SimpleVT code already exists inside the EVT equivalents, but by splitting this out we can use these directly inside MVT types without converting to/from EVT.
-
Evgeny Leviant authored
-
Alexander Belyaev authored
Reuse most code for printing/parsing/verification from SubViewOp. https://llvm.discourse.group/t/rfc-standard-memref-cast-ops/1454/15 Differential Revision: https://https://reviews.llvm.org/D89720
-