llvm-project/llvm/test/CodeGen/Generic
Dan Gohman 2c74fe977d Add an @llvm.sideeffect intrinsic
This patch implements Chandler's idea [0] for supporting languages that
require support for infinite loops with side effects, such as Rust, providing
part of a solution to bug 965 [1].

Specifically, it adds an `llvm.sideeffect()` intrinsic, which has no actual
effect, but which appears to optimization passes to have obscure side effects,
such that they don't optimize away loops containing it. It also teaches
several optimization passes to ignore this intrinsic, so that it doesn't
significantly impact optimization in most cases.

As discussed on llvm-dev [2], this patch is the first of two major parts.
The second part, to change LLVM's semantics to have defined behavior
on infinite loops by default, with a function attribute for opting into
potential-undefined-behavior, will be implemented and posted for review in
a separate patch.

[0] http://lists.llvm.org/pipermail/llvm-dev/2015-July/088103.html
[1] https://bugs.llvm.org/show_bug.cgi?id=965
[2] http://lists.llvm.org/pipermail/llvm-dev/2017-October/118632.html

Differential Revision: https://reviews.llvm.org/D38336

llvm-svn: 317729
2017-11-08 21:59:51 +00:00
..
2002-04-14-UnexpectedUnsignedType.ll
2002-04-16-StackFrameSizeAlignment.ll
2003-05-27-phifcmpd.ll
2003-05-27-useboolinotherbb.ll
2003-05-27-usefsubasbool.ll
2003-05-28-ManyArgs.ll [opaque pointer type] Add textual IR support for explicit type parameter to load instruction 2015-02-27 21:17:42 +00:00
2003-05-30-BadFoldGEP.ll [opaque pointer type] Add textual IR support for explicit type parameter to load instruction 2015-02-27 21:17:42 +00:00
2003-05-30-BadPreselectPhi.ll
2003-07-06-BadIntCmp.ll [opaque pointer type] Add textual IR support for explicit type parameter to the call instruction 2015-04-16 23:24:18 +00:00
2003-07-07-BadLongConst.ll [opaque pointer type] Add textual IR support for explicit type parameter to the call instruction 2015-04-16 23:24:18 +00:00
2003-07-08-BadCastToBool.ll [opaque pointer type] Add textual IR support for explicit type parameter to the call instruction 2015-04-16 23:24:18 +00:00
2003-07-29-BadConstSbyte.ll [AVR] Add/remove XFAILs to get the backend passing Generic CodeGen tests 2017-07-16 23:33:50 +00:00
2004-05-09-LiveVarPartialRegister.ll [opaque pointer type] Add textual IR support for explicit type parameter to load instruction 2015-02-27 21:17:42 +00:00
2005-01-18-SetUO-InfLoop.ll
2005-04-09-GlobalInPHI.ll [opaque pointer type] Add textual IR support for explicit type parameter to gep operator 2015-03-13 18:20:45 +00:00
2005-10-18-ZeroSizeStackObject.ll
2005-10-21-longlonggtu.ll
2005-12-01-Crash.ll [opaque pointer type] Add textual IR support for explicit type parameter to the call instruction 2015-04-16 23:24:18 +00:00
2005-12-12-ExpandSextInreg.ll
2006-01-12-BadSetCCFold.ll
2006-01-18-InvalidBranchOpcodeAssert.ll
2006-02-12-InsertLibcall.ll [opaque pointer type] Add textual IR support for explicit type parameter to load instruction 2015-02-27 21:17:42 +00:00
2006-03-01-dagcombineinfloop.ll [opaque pointer type] Add textual IR support for explicit type parameter to load instruction 2015-02-27 21:17:42 +00:00
2006-04-26-SetCCAnd.ll [opaque pointer type] Add textual IR support for explicit type parameter to load instruction 2015-02-27 21:17:42 +00:00
2006-04-28-Sign-extend-bool.ll
2006-05-06-GEP-Cast-Sink-Crash.ll [opaque pointer type] Add textual IR support for explicit type parameter to the call instruction 2015-04-16 23:24:18 +00:00
2006-06-12-LowerSwitchCrash.ll
2006-06-13-ComputeMaskedBitsCrash.ll [opaque pointer type] Add textual IR support for explicit type parameter to load instruction 2015-02-27 21:17:42 +00:00
2006-06-28-SimplifySetCCCrash.ll [opaque pointer type] Add textual IR support for explicit type parameter to load instruction 2015-02-27 21:17:42 +00:00
2006-07-03-schedulers.ll
2006-08-30-CoalescerCrash.ll
2006-09-02-LocalAllocCrash.ll [opaque pointer type] Add textual IR support for explicit type parameter to gep operator 2015-03-13 18:20:45 +00:00
2006-09-06-SwitchLowering.ll
2006-10-27-CondFolding.ll
2006-10-29-Crash.ll
2006-11-20-DAGCombineCrash.ll [opaque pointer type] Add textual IR support for explicit type parameter to load instruction 2015-02-27 21:17:42 +00:00
2007-01-15-LoadSelectCycle.ll [opaque pointer type] Add textual IR support for explicit type parameter to load instruction 2015-02-27 21:17:42 +00:00
2007-02-25-invoke.ll Move the personality function from LandingPadInst to Function 2015-06-17 20:52:32 +00:00
2007-04-08-MultipleFrameIndices.ll [AVR] XFAIL a set of failing CodeGen tests 2017-02-08 10:24:18 +00:00
2007-04-13-SwitchLowerBadPhi.ll
2007-04-17-lsr-crash.ll
2007-04-27-InlineAsm-X-Dest.ll
2007-04-27-LargeMemObject.ll
2007-04-30-LandingPadBranchFolding.ll Move the personality function from LandingPadInst to Function 2015-06-17 20:52:32 +00:00
2007-05-03-EHTypeInfo.ll CodeGen: @llvm.eh.typeid.for replaced @llvm.eh.typeid.for.i32 2015-03-16 21:36:38 +00:00
2007-05-15-InfiniteRecursion.ll
2007-12-17-InvokeAsm.ll [AVR] XFAIL a set of failing CodeGen tests 2017-02-08 10:24:18 +00:00
2007-12-31-UnusedSelector.ll Move the personality function from LandingPadInst to Function 2015-06-17 20:52:32 +00:00
2008-01-25-dag-combine-mul.ll [opaque pointer type] Add textual IR support for explicit type parameter to load instruction 2015-02-27 21:17:42 +00:00
2008-01-30-LoadCrash.ll [opaque pointer type] Add textual IR support for explicit type parameter to load instruction 2015-02-27 21:17:42 +00:00
2008-02-04-Ctlz.ll [opaque pointer type] Add textual IR support for explicit type parameter to the call instruction 2015-04-16 23:24:18 +00:00
2008-02-04-ExtractSubvector.ll
2008-02-20-MatchingMem.ll Unxfail passing test on Hexagon 2015-03-12 20:38:10 +00:00
2008-02-25-NegateZero.ll [opaque pointer type] Add textual IR support for explicit type parameter to the call instruction 2015-04-16 23:24:18 +00:00
2008-02-26-NegatableCrash.ll
2008-08-07-PtrToInt-SmallerInt.ll [opaque pointer type] Add textual IR support for explicit type parameter to gep operator 2015-03-13 18:20:45 +00:00
2009-03-17-LSR-APInt.ll [opaque pointer type] Add textual IR support for explicit type parameter for global aliases 2015-09-11 03:22:04 +00:00
2009-03-29-SoftFloatVectorExtract.ll Migrate existing backends that care about software floating point 2015-05-12 01:26:05 +00:00
2009-04-10-SinkCrash.ll
2009-04-28-i128-cmp-crash.ll [opaque pointer type] Add textual IR support for explicit type parameter to load instruction 2015-02-27 21:17:42 +00:00
2009-11-16-BadKillsCrash.ll Move the personality function from LandingPadInst to Function 2015-06-17 20:52:32 +00:00
2010-07-27-DAGCombineCrash.ll
2010-11-04-BigByval.ll
2010-ZeroSizedArg.ll
2011-01-06-BigNumberCrash.ll
2011-07-07-ScheduleDAGCrash.ll [AVR] Add/remove XFAILs to get the backend passing Generic CodeGen tests 2017-07-16 23:33:50 +00:00
2012-06-08-APIntCrash.ll [opaque pointer type] Add textual IR support for explicit type parameter to load instruction 2015-02-27 21:17:42 +00:00
2013-03-20-APFloatCrash.ll
2014-02-05-OpaqueConstants.ll [opaque pointer type] Add textual IR support for explicit type parameter to load instruction 2015-02-27 21:17:42 +00:00
APIntLoadStore.ll [opaque pointer type] Add textual IR support for explicit type parameter to load instruction 2015-02-27 21:17:42 +00:00
APIntParam.ll
APIntSextParam.ll
APIntZextParam.ll
BasicInstrs.ll
ConstantExprLowering.ll [opaque pointer type] Add textual IR support for explicit type parameter to the call instruction 2015-04-16 23:24:18 +00:00
ForceStackAlign.ll Revert "Change memcpy/memset/memmove to have dest and source alignments." 2015-11-19 05:56:52 +00:00
MachineBranchProb.ll [ARM/AARCH64] Make test MachineBranchProb.ll more robust and re-enable for ARM/AArch64 2017-10-05 18:33:34 +00:00
PBQP.ll [opaque pointer type] Add textual IR support for explicit type parameter to the call instruction 2015-04-16 23:24:18 +00:00
add-with-overflow-24.ll [opaque pointer type] Add textual IR support for explicit type parameter to the call instruction 2015-04-16 23:24:18 +00:00
add-with-overflow-128.ll [opaque pointer type] Add textual IR support for explicit type parameter to the call instruction 2015-04-16 23:24:18 +00:00
add-with-overflow.ll [opaque pointer type] Add textual IR support for explicit type parameter to the call instruction 2015-04-16 23:24:18 +00:00
addr-label.ll
annotate.ll [opaque pointer type] Add textual IR support for explicit type parameter to gep operator 2015-03-13 18:20:45 +00:00
asm-large-immediate.ll
assume.ll
badCallArgLRLLVM.ll
badFoldGEP.ll [opaque pointer type] Add textual IR support for explicit type parameter to load instruction 2015-02-27 21:17:42 +00:00
badarg6.ll [opaque pointer type] Add textual IR support for explicit type parameter to the call instruction 2015-04-16 23:24:18 +00:00
bool-to-double.ll
builtin-expect.ll [opaque pointer type] Add textual IR support for explicit type parameter to the call instruction 2015-04-16 23:24:18 +00:00
call-ret0.ll
call-ret42.ll
call-void.ll
call2-ret0.ll
cast-fp.ll [opaque pointer type] Add textual IR support for explicit type parameter to the call instruction 2015-04-16 23:24:18 +00:00
cfi-sections.ll PR 31534: When emitting both DWARF unwind tables and debug information, 2017-01-05 20:55:28 +00:00
constindices.ll [opaque pointer type] Add textual IR support for explicit type parameter to the call instruction 2015-04-16 23:24:18 +00:00
crash.ll [opaque pointer type] Add textual IR support for explicit type parameter to gep operator 2015-03-13 18:20:45 +00:00
dag-combine-crash.ll [opaque pointer type] Add textual IR support for explicit type parameter to load instruction 2015-02-27 21:17:42 +00:00
dbg_value.ll DI: Require subprogram definitions to be distinct 2015-08-28 20:26:49 +00:00
div-neg-power-2.ll
donothing.ll Move the personality function from LandingPadInst to Function 2015-06-17 20:52:32 +00:00
dont-remove-empty-preheader.ll Add missing test for the "Don't delete empty preheaders" added in r265397 2016-04-05 14:21:32 +00:00
edge-bundles-blockIDs.ll
empty-insertvalue.ll
empty-load-store.ll [opaque pointer type] Add textual IR support for explicit type parameter to load instruction 2015-02-27 21:17:42 +00:00
empty-phi.ll [opaque pointer type] Add textual IR support for explicit type parameter to load instruction 2015-02-27 21:17:42 +00:00
exception-handling.ll Move the personality function from LandingPadInst to Function 2015-06-17 20:52:32 +00:00
expand-experimental-reductions.ll Add a late IR expansion pass for the experimental reduction intrinsics. 2017-05-10 09:42:49 +00:00
externally_available.ll Do not verify MachimeDominatorTree if it is not calculated 2017-03-02 12:00:10 +00:00
fastcall.ll [opaque pointer type] Add textual IR support for explicit type parameter to gep operator 2015-03-13 18:20:45 +00:00
fneg-fabs.ll
fp-to-int-invalid.ll [opaque pointer type] Add textual IR support for explicit type parameter to load instruction 2015-02-27 21:17:42 +00:00
fp_to_int.ll
fpowi-promote.ll
fwdtwice.ll [opaque pointer type] Add textual IR support for explicit type parameter to load instruction 2015-02-27 21:17:42 +00:00
global-ret0.ll [opaque pointer type] Add textual IR support for explicit type parameter to load instruction 2015-02-27 21:17:42 +00:00
hello.ll [opaque pointer type] Add textual IR support for explicit type parameter to the call instruction 2015-04-16 23:24:18 +00:00
i128-addsub.ll
i128-arith.ll
icmp-illegal.ll Remove an empty line in icmp-illegal.ll . NFC 2017-02-27 16:09:44 +00:00
inline-asm-mem-clobber.ll [AVR] XFAIL a set of failing CodeGen tests 2017-02-08 10:24:18 +00:00
inline-asm-special-strings.ll
intrinsics.ll Add an @llvm.sideeffect intrinsic 2017-11-08 21:59:51 +00:00
invalid-memcpy.ll Revert "Change memcpy/memset/memmove to have dest and source alignments." 2015-11-19 05:56:52 +00:00
isunord.ll
lit.local.cfg Make the default triple optional by allowing an empty string 2015-09-16 05:34:32 +00:00
llc-start-stop.ll re-land [ExpandMemCmp] Split ExpandMemCmp from CodeGen into its own pass." 2017-11-03 12:12:27 +00:00
llvm-ct-intrinsics.ll
multiple-return-values-cross-block-with-invoke.ll [Hexagon] Unxfail passing tests 2017-04-13 16:05:35 +00:00
negintconst.ll [opaque pointer type] Add textual IR support for explicit type parameter to the call instruction 2015-04-16 23:24:18 +00:00
nested-select.ll
no-target.ll
opt-codegen-no-target-machine.ll [LegacyPassManager] Remove TargetMachine constructors 2017-05-18 17:21:13 +00:00
overflow.ll
overloaded-intrinsic-name.ll Only run the overloaded-intrinsic-name.ll test once, with FileCheck. 2017-03-01 01:56:41 +00:00
pr2625.ll [opaque pointer type] Add textual IR support for explicit type parameter to load instruction 2015-02-27 21:17:42 +00:00
pr3288.ll
pr12507.ll
pr24662.ll Fix constant folding of fp2int to large integers 2017-03-19 16:50:25 +00:00
pr33094.ll Handle ConstantExpr correctly in SelectionDAGBuilder 2017-07-09 16:01:04 +00:00
print-add.ll [opaque pointer type] Add textual IR support for explicit type parameter to the call instruction 2015-04-16 23:24:18 +00:00
print-after.ll
print-arith-fp.ll [opaque pointer type] Add textual IR support for explicit type parameter to the call instruction 2015-04-16 23:24:18 +00:00
print-arith-int.ll [opaque pointer type] Add textual IR support for explicit type parameter to the call instruction 2015-04-16 23:24:18 +00:00
print-int.ll [opaque pointer type] Add textual IR support for explicit type parameter to the call instruction 2015-04-16 23:24:18 +00:00
print-machineinstrs.ll [SystemZ] Fix trap issue and enable expensive checks. 2017-06-23 14:30:46 +00:00
print-mul-exp.ll [AVR] Add/remove XFAILs to get the backend passing Generic CodeGen tests 2017-07-16 23:33:50 +00:00
print-mul.ll [AVR] Add/remove XFAILs to get the backend passing Generic CodeGen tests 2017-07-16 23:33:50 +00:00
print-shift.ll [AVR] Add/remove XFAILs to get the backend passing Generic CodeGen tests 2017-07-16 23:33:50 +00:00
ptr-annotate.ll [opaque pointer type] Add textual IR support for explicit type parameter to gep operator 2015-03-13 18:20:45 +00:00
ret0.ll
ret42.ll
select-cc.ll [Hexagon] Unxfail passing tests 2017-04-13 16:05:35 +00:00
select.ll [opaque pointer type] Add textual IR support for explicit type parameter to load instruction 2015-02-27 21:17:42 +00:00
shift-int64.ll
stacksave-restore.ll
storetrunc-fp.ll
switch-lower-feature.ll
switch-lower.ll
trap.ll
undef-phi.ll [opaque pointer type] Add textual IR support for explicit type parameter to load instruction 2015-02-27 21:17:42 +00:00
v-split.ll [AVR] Add/remove XFAILs to get the backend passing Generic CodeGen tests 2017-07-16 23:33:50 +00:00
vector-casts.ll whitespace tidyup. NFC. 2015-07-03 08:02:12 +00:00
vector-constantexpr.ll
vector-identity-shuffle.ll [opaque pointer type] Add textual IR support for explicit type parameter to load instruction 2015-02-27 21:17:42 +00:00
vector-redux.ll [AVR] Add/remove XFAILs to get the backend passing Generic CodeGen tests 2017-07-16 23:33:50 +00:00
vector.ll [AVR] Add/remove XFAILs to get the backend passing Generic CodeGen tests 2017-07-16 23:33:50 +00:00
zero-probability.mir [MIParser] Ensure getHexUint doesn't produce APInts with a bitwidth of 0 2017-09-01 22:17:14 +00:00
zero-sized-array.ll