diff options
| author | Chen Zheng <czhengsz@cn.ibm.com> | 2018-12-13 12:25:20 +0000 |
|---|---|---|
| committer | Chen Zheng <czhengsz@cn.ibm.com> | 2018-12-13 12:25:20 +0000 |
| commit | 9c6fa536e0c71e5c2630390f48f5f2d5d339fd50 (patch) | |
| tree | 868363103d19f6437e7b2732801fecda24a0e3f1 /llvm/lib | |
| parent | ab973a45b9796500955202ca606cf0bed083109b (diff) | |
| download | bcm5719-llvm-9c6fa536e0c71e5c2630390f48f5f2d5d339fd50.tar.gz bcm5719-llvm-9c6fa536e0c71e5c2630390f48f5f2d5d339fd50.zip | |
[PowerPC] intrinsic llvm.eh.sjlj.setjmp should not have flag isBarrier.
Differential Revision: https://reviews.llvm.org/D55499
llvm-svn: 349029
Diffstat (limited to 'llvm/lib')
| -rw-r--r-- | llvm/lib/Target/PowerPC/PPCInstr64Bit.td | 7 | ||||
| -rw-r--r-- | llvm/lib/Target/PowerPC/PPCInstrInfo.td | 7 |
2 files changed, 12 insertions, 2 deletions
diff --git a/llvm/lib/Target/PowerPC/PPCInstr64Bit.td b/llvm/lib/Target/PowerPC/PPCInstr64Bit.td index d7c3f7fff85..729160d90d5 100644 --- a/llvm/lib/Target/PowerPC/PPCInstr64Bit.td +++ b/llvm/lib/Target/PowerPC/PPCInstr64Bit.td @@ -347,12 +347,17 @@ def MFCR8 : XFXForm_3<31, 19, (outs g8rc:$rT), (ins), } // hasExtraSrcRegAllocReq = 1 } // hasSideEffects = 0 -let hasSideEffects = 1, isBarrier = 1, usesCustomInserter = 1 in { +// While longjmp is a control-flow barrier (fallthrough isn't allowed), setjmp +// is not. +let hasSideEffects = 1, usesCustomInserter = 1 in { let Defs = [CTR8] in def EH_SjLj_SetJmp64 : Pseudo<(outs gprc:$dst), (ins memr:$buf), "#EH_SJLJ_SETJMP64", [(set i32:$dst, (PPCeh_sjlj_setjmp addr:$buf))]>, Requires<[In64BitMode]>; +} + +let hasSideEffects = 1, isBarrier = 1, usesCustomInserter = 1 in { let isTerminator = 1 in def EH_SjLj_LongJmp64 : Pseudo<(outs), (ins memr:$buf), "#EH_SJLJ_LONGJMP64", diff --git a/llvm/lib/Target/PowerPC/PPCInstrInfo.td b/llvm/lib/Target/PowerPC/PPCInstrInfo.td index 108ccc1fc02..f048ea17d4c 100644 --- a/llvm/lib/Target/PowerPC/PPCInstrInfo.td +++ b/llvm/lib/Target/PowerPC/PPCInstrInfo.td @@ -1550,12 +1550,17 @@ def TAILBA : IForm<18, 0, 0, (outs), (ins abscalltarget:$dst), } -let hasSideEffects = 1, isBarrier = 1, usesCustomInserter = 1 in { +// While longjmp is a control-flow barrier (fallthrough isn't allowed), setjmp +// is not. +let hasSideEffects = 1, usesCustomInserter = 1 in { let Defs = [CTR] in def EH_SjLj_SetJmp32 : Pseudo<(outs gprc:$dst), (ins memr:$buf), "#EH_SJLJ_SETJMP32", [(set i32:$dst, (PPCeh_sjlj_setjmp addr:$buf))]>, Requires<[In32BitMode]>; +} + +let hasSideEffects = 1, isBarrier = 1, usesCustomInserter = 1 in { let isTerminator = 1 in def EH_SjLj_LongJmp32 : Pseudo<(outs), (ins memr:$buf), "#EH_SJLJ_LONGJMP32", |

