Commit Graph

401 Commits

Author SHA1 Message Date
Mathias Vorreiter Pedersen
c726285cac C++: Sync identical files. 2025-08-03 12:17:31 +01:00
Mathias Vorreiter Pedersen
0d9e298250 C++: Specifier-only converting instructions preserve GVNs. 2025-08-03 12:17:19 +01:00
Jeroen Ketema
29a6af4efd C++: Fix instruction class name 2025-07-16 18:11:17 +02:00
Jeroen Ketema
f319381f27 C++: Support the spaceship operator in the IR 2025-07-16 17:53:55 +02:00
Jeroen Ketema
529712122c C++: Address review comments 2025-07-15 22:15:11 +02:00
Jeroen Ketema
a08d594371 C++: Introduce TypeidInstruction base class 2025-07-15 21:31:24 +02:00
Jeroen Ketema
54f11ca611 C++: Fix typo in comment 2025-07-15 20:40:57 +02:00
Jeroen Ketema
70bff4e726 C++: Fix typeid IR translation 2025-07-15 20:24:17 +02:00
Mathias Vorreiter Pedersen
663c3e7b6d C++: Sync identical files. 2025-07-11 09:36:44 +01:00
Mathias Vorreiter Pedersen
11cba94032 C++: Add a missing predicate on 'UninitializedInstruction' that we will use later. 2025-07-11 09:36:42 +01:00
Jeroen Ketema
d6d7c6d55f Revert "C++: Factor out transparent conversions in their own predicate"
This reverts commit b185cc8b95.
2025-07-04 23:22:46 +02:00
Jeroen Ketema
463ae4b1eb C++: Address review comments 2025-07-04 23:13:37 +02:00
Jeroen Ketema
2908570ce9 C++: Do not consider expression results discardable when there is a conversion 2025-07-04 14:10:34 +02:00
Jeroen Ketema
b185cc8b95 C++: Factor out transparent conversions in their own predicate 2025-07-04 14:09:34 +02:00
Jeroen Ketema
b4caba7c0e C++: Merge the location tables 2025-06-27 14:42:08 +02:00
Jeroen Ketema
ca961386b2 C++: Handle Arm SVE in the IR 2025-06-23 12:33:42 +02:00
Mathias Vorreiter Pedersen
7355f555a5 C++: Add an exception edge out of calls inside try statements. 2025-06-16 17:27:11 +01:00
Jeroen Ketema
4228828b66 C++: Address review comments 2025-06-16 15:02:08 +02:00
Jeroen Ketema
9d6a1a9885 C++: Generate SEH edges for pointer dereference loads in __try blocks 2025-06-16 12:39:53 +02:00
Jeroen Ketema
3eb768c1e9 C++: Generate SEH edges for pointer dereference stores in __try blocks 2025-06-16 12:39:50 +02:00
Jeroen Ketema
1b2813dcf6 C++: Also generate an SEH edge for calls in initializers 2025-06-14 00:16:47 +02:00
Jeroen Ketema
4a42ca8c69 C++: Limit SEH exception edges to calls in __try blocks 2025-06-13 20:34:35 +02:00
Jeroen Ketema
c7a7447768 C++: Generate an SEH exception edge for each call inside a SEH block 2025-06-13 16:30:25 +02:00
Jeroen Ketema
6f41d3c4e3 C++: Use SEH exception edges for functions that unconditionally throw those 2025-06-13 16:30:23 +02:00
Jeroen Ketema
0038d0f17c C++: Deprecate ThrowingFunction and no longer use in IR 2025-06-13 16:30:20 +02:00
Mathias Vorreiter Pedersen
0836f0b413 C++: Cache and fix join order in 'hasIncompleteSsa'. 2025-05-13 13:41:15 +01:00
Mathias Vorreiter Pedersen
510df38da2 C++: Add an 'hasIncompleteSsa' predicate to check whether a function has correctly modelled SSA information. 2025-05-13 10:54:20 +01:00
Mathias Vorreiter Pedersen
f1b4e05579 C++: Expose 'isBusyDef'. 2025-05-12 19:45:19 +01:00
Mathias Vorreiter Pedersen
e51cb478af C++: Expose 'MemoryLocation0'. 2025-05-12 19:43:19 +01:00
Jeroen Ketema
df3282c204 C++: Support C23 typeof and typeof_unqual 2025-04-23 16:56:47 +02:00
Jeroen Ketema
4b85ea3bc6 Merge pull request #18502 from jketema/consteval
C++: Support `if consteval` and `if ! consteval`
2025-01-20 12:49:02 +01:00
Jeroen Ketema
a9e0f20861 C++: Simplify consteval if to be just a single class with an isNot predicate 2025-01-20 11:20:11 +01:00
Jeroen Ketema
bc2f203c4b C++: Support if consteval and if ! consteval 2025-01-16 08:17:57 +01:00
Mathias Vorreiter Pedersen
2d9036eb5f C++: Make 'getInstructionConvertedResultExpression' equivalent in C and C++. 2025-01-16 00:39:35 +00:00
Mathias Vorreiter Pedersen
65771614ef C++: Insert int-to-bool conversions at binary conditional expressions. 2025-01-16 00:39:28 +00:00
Mathias Vorreiter Pedersen
f30bfb63cf C++: Insert int-to-bool conversions at 'NotExpr's. 2025-01-16 00:39:25 +00:00
Mathias Vorreiter Pedersen
dd39b97ab0 C++: Insert int-to-bool conversions at conditions. 2025-01-16 00:39:22 +00:00
Mathias Vorreiter Pedersen
5acd2bb2fb C++: Adjust the result type at 'NotExpr' and at comparisons. 2025-01-16 00:39:17 +00:00
Mathias Vorreiter Pedersen
9429b03896 C++: Provide a hook for overriding 'getResultType'. 2025-01-16 00:39:16 +00:00
Mathias Vorreiter Pedersen
6dd1c5e809 C++: Split out 'NotExpr' to its own class. 2025-01-16 00:39:14 +00:00
Jeroen Ketema
84c674b992 C++: Fix typos in IR translation comments 2025-01-15 20:16:43 +01:00
Jeroen Ketema
3f093aea35 C++: Fix join order problem after stats file update
Tuple counts before the change (terminated early):
```
[2025-01-11 17:49:42] (297s) Tuple counts for AliasedSSA::getResultMemoryLocation/1#eb4efd2d/2@c513392o after 13.5s:
                      0          ~0%       {3} r1 = JOIN `_SSAConstruction::getInstructionOpcode/2#ec2d1f97_10#join_rhs__AliasedSSA::canReuseSsaForOldResult/1__#shared` WITH Opcode::MayWriteOpcode#class#21b7b7f2 ON FIRST 1 OUTPUT Lhs.1, Lhs.2 'instr', _
                      0          ~0%       {3}    | REWRITE WITH Out.2 := true

                      30500      ~124%     {2} r2 = SCAN `_AliasedSSA::canReuseSsaForOldResult/1#280fbda5_Opcode::Opcode.getWriteMemoryAccess/0#dispred#531702__#shared` OUTPUT In.1, In.0 'instr'
                                           {2}    | AND NOT `_Opcode::MayWriteOpcode#class#21b7b7f2__SSAConstruction::getInstructionOpcode/2#ec2d1f97_10#join_rhs__#antijoin_rhs#1`(FIRST 2)
                      30500      ~134%     {3}    | SCAN OUTPUT In.0, In.1 'instr', _
                      30500      ~120%     {3}    | REWRITE WITH Out.2 := false

                      30500      ~120%     {3} r3 = r1 UNION r2

                      8000       ~738%     {2} r4 = JOIN r3 WITH num#MemoryAccessKind::TEscapedMemoryAccess#a0368c86 ON FIRST 1 OUTPUT Lhs.1 'instr', Lhs.2
                                           {2}    | AND NOT `AliasedSSA::canReuseSsaForOldResult/1#280fbda5`(FIRST 1)
                      4000       ~699%     {2}    | SCAN OUTPUT In.1, In.0 'instr'
                      1501792000 ~686%     {3}    | JOIN WITH num#AliasedSSA::TAllAliasedMemory#4bb632db_102#join_rhs ON FIRST 1 OUTPUT Rhs.2 'result', Lhs.1 'instr', Rhs.1
                      1501788000 ~709%     {3}    | JOIN WITH AliasedSSA::MemoryLocation#4b9f223c ON FIRST 1 OUTPUT Lhs.1 'instr', Lhs.2, Lhs.0 'result'
                      0          ~0%       {2}    | JOIN WITH `SSAConstruction::getInstructionEnclosingIRFunction/1#d26c0476` ON FIRST 2 OUTPUT Lhs.0 'instr', Lhs.2 'result'

                      8000       ~674%     {2} r5 = JOIN r3 WITH num#MemoryAccessKind::TNonLocalMemoryAccess#b2a59f45 ON FIRST 1 OUTPUT Lhs.1 'instr', Lhs.2
                                           {2}    | AND NOT `AliasedSSA::canReuseSsaForOldResult/1#280fbda5`(FIRST 1)
                      4000       ~689%     {2}    | SCAN OUTPUT In.1, In.0 'instr'
                      310509500  ~547%     {3}    | JOIN WITH num#AliasedSSA::TAllNonLocalMemory#7ba9f6c9_102#join_rhs ON FIRST 1 OUTPUT Rhs.2 'result', Lhs.1 'instr', Rhs.1
                      310504500  ~527%     {3}    | JOIN WITH AliasedSSA::MemoryLocation#4b9f223c ON FIRST 1 OUTPUT Lhs.1 'instr', Lhs.2, Lhs.0 'result'
                      0          ~0%       {2}    | JOIN WITH `SSAConstruction::getInstructionEnclosingIRFunction/1#d26c0476` ON FIRST 2 OUTPUT Lhs.0 'instr', Lhs.2 'result'

                      5000       ~2%       {2} r6 = JOIN r3 WITH `AliasedSSA::isIndirectOrBufferMemoryAccess/1#a6492554` ON FIRST 1 OUTPUT Lhs.1 'instr', Lhs.2
                      5000       ~2%       {2}    | AND NOT `AliasedSSA::canReuseSsaForOldResult/1#280fbda5`(FIRST 1)

                                           {2} r7 = r6 AND NOT `project#AliasedSSA::hasResultMemoryAccess/9#732473d4#7`(FIRST 1)
                      0          ~0%       {2}    | SCAN OUTPUT In.1, In.0 'instr'
                      0          ~0%       {3}    | JOIN WITH num#AliasedSSA::TUnknownMemoryLocation#e0c2a990_102#join_rhs ON FIRST 1 OUTPUT Rhs.2 'result', Lhs.1 'instr', Rhs.1
                      0          ~0%       {3}    | JOIN WITH AliasedSSA::MemoryLocation#4b9f223c ON FIRST 1 OUTPUT Lhs.1 'instr', Lhs.2, Lhs.0 'result'
                      0          ~0%       {2}    | JOIN WITH `SSAConstruction::getInstructionEnclosingIRFunction/1#d26c0476` ON FIRST 2 OUTPUT Lhs.0 'instr', Lhs.2 'result'

                      5000       ~0%       {2} r8 = JOIN r3 WITH num#MemoryAccessKind::TEntireAllocationMemoryAccess#503d0afb ON FIRST 1 OUTPUT Lhs.1 'instr', Lhs.2
                      5000       ~0%       {2}    | AND NOT `AliasedSSA::canReuseSsaForOldResult/1#280fbda5`(FIRST 1)
                      4500       ~2%       {4}    | JOIN WITH `Instruction::Instruction.getResultAddressOperand/0#dispred#619d4407` ON FIRST 1 OUTPUT Rhs.1, Lhs.0 'instr', _, Lhs.1
                      4500       ~4%       {3}    | REWRITE WITH Out.2 := booleanNot(In.3) KEEPING 3
                      0          ~0%       {3}    | JOIN WITH `project#AliasAnalysis::addressOperandAllocationAndOffset/3#c64a9862` ON FIRST 1 OUTPUT Rhs.1, Lhs.1 'instr', Lhs.2
                      0          ~0%       {4}    | JOIN WITH num#AliasedSSA::TEntireAllocationMemoryLocation#85bb24dd ON FIRST 1 OUTPUT Lhs.1 'instr', Lhs.2, Rhs.1, Rhs.2 'result'
                                           {4}    | REWRITE WITH TEST InOut.1 != InOut.2
                      0          ~0%       {2}    | SCAN OUTPUT In.3 'result', In.0 'instr'
                      0          ~0%       {2}    | JOIN WITH AliasedSSA::MemoryLocation#4b9f223c ON FIRST 1 OUTPUT Lhs.1 'instr', Lhs.0 'result'

                      4500       ~0%       {5} r9 = JOIN r6 WITH `project#AliasedSSA::hasResultMemoryAccess/9#732473d4#5_0512346#join_rhs` ON FIRST 2 OUTPUT Lhs.0 'instr', Lhs.1, Rhs.2, Rhs.6, _
                                           {4}    | REWRITE WITH Tmp.4 := false, TEST InOut.3 != Tmp.4 KEEPING 4
                      0          ~0%       {5}    | SCAN OUTPUT In.2, _, In.0 'instr', _, In.1
                      0          ~0%       {4}    | REWRITE WITH Out.1 := false, Out.3 := booleanNot(In.4) KEEPING 4
                      0          ~0%       {4}    | JOIN WITH `AliasedSSA::getGroupedMemoryLocation/3#14ef79fc#ffbf_0213#join_rhs` ON FIRST 2 OUTPUT Lhs.2 'instr', Lhs.3, Rhs.2, Rhs.3 'result'
                                           {4}    | REWRITE WITH TEST InOut.1 != InOut.2
                      0          ~0%       {2}    | SCAN OUTPUT In.3 'result', In.0 'instr'
                      0          ~0%       {2}    | JOIN WITH AliasedSSA::MemoryLocation#4b9f223c ON FIRST 1 OUTPUT Lhs.1 'instr', Lhs.0 'result'

                      4500       ~0%       {8} r10 = JOIN r6 WITH `project#AliasedSSA::hasResultMemoryAccess/9#732473d4#5_0512346#join_rhs` ON FIRST 2 OUTPUT Lhs.0 'instr', Lhs.1, Rhs.2, Rhs.3, Rhs.4, Rhs.5, Rhs.6, _
                                           {7}    | REWRITE WITH Tmp.7 := false, TEST InOut.6 = Tmp.7 KEEPING 7
                      4000       ~0%       {6}    | SCAN OUTPUT In.2, In.3, In.4, In.5, In.0 'instr', In.1
                      3500       ~1%       {8}    | JOIN WITH num#AliasedSSA::TVariableMemoryLocation#8e8cb20c_013456#join_rhs ON FIRST 4 OUTPUT Rhs.5 'result', Lhs.4 'instr', Lhs.5, Lhs.0, Lhs.1, Lhs.2, Lhs.3, Rhs.4
                      3000       ~0%       {8}    | JOIN WITH AliasedSSA::MemoryLocation#4b9f223c ON FIRST 1 OUTPUT Lhs.1 'instr', Lhs.3, Lhs.4, Lhs.5, Lhs.6, Lhs.2, Lhs.7, Lhs.0 'result'
                      2500       ~2%       {5}    | JOIN WITH `project#AliasedSSA::hasResultMemoryAccess/9#732473d4#6` ON FIRST 6 OUTPUT Lhs.0 'instr', Lhs.6, Lhs.7 'result', _, Lhs.5
                                           {4}    | REWRITE WITH Out.3 := booleanNot(In.4), TEST Out.3 != InOut.1 KEEPING 4
                      2000       ~0%       {2}    | SCAN OUTPUT In.0 'instr', In.2 'result'

                      2000       ~0%       {2} r11 = r4 UNION r5 UNION r7 UNION r8 UNION r9 UNION r10
                                           return r11
```

Tuple counts after:
```
[2025-01-11 17:52:46] (9s) Tuple counts for AliasedSSA::getResultMemoryLocation/1#eb4efd2d/2@6c9e69ae after 6.1s:
                      1283623 ~5%       {3} r1 = JOIN `_SSAConstruction::getInstructionOpcode/2#ec2d1f97_10#join_rhs__AliasedSSA::canReuseSsaForOldResult/1__#shared` WITH Opcode::MayWriteOpcode#class#21b7b7f2 ON FIRST 1 OUTPUT Lhs.1, Lhs.2 'instr', _
                      1283623 ~0%       {3}    | REWRITE WITH Out.2 := true

                      2965447 ~0%       {2} r2 = SCAN `_AliasedSSA::canReuseSsaForOldResult/1#280fbda5_Opcode::Opcode.getWriteMemoryAccess/0#dispred#531702__#shared` OUTPUT In.1, In.0 'instr'
                                        {2}    | AND NOT `_Opcode::MayWriteOpcode#class#21b7b7f2__SSAConstruction::getInstructionOpcode/2#ec2d1f97_10#join_rhs__#antijoin_rhs#1`(FIRST 2)
                      1681824 ~1%       {3}    | SCAN OUTPUT In.0, In.1 'instr', _
                      1681824 ~0%       {3}    | REWRITE WITH Out.2 := false

                      2965447 ~0%       {3} r3 = r1 UNION r2

                      1334818 ~0%       {2} r4 = JOIN r3 WITH num#MemoryAccessKind::TEscapedMemoryAccess#a0368c86 ON FIRST 1 OUTPUT Lhs.1 'instr', Lhs.2
                      1334818 ~0%       {2}    | AND NOT `AliasedSSA::canReuseSsaForOldResult/1#280fbda5`(FIRST 1)
                      1334818 ~6%       {3}    | JOIN WITH `SSAConstruction::getInstructionEnclosingIRFunction/1#d26c0476` ON FIRST 1 OUTPUT Rhs.1, Lhs.1, Lhs.0 'instr'
                      1334818 ~4%       {2}    | JOIN WITH num#AliasedSSA::TAllAliasedMemory#4bb632db ON FIRST 2 OUTPUT Rhs.2 'result', Lhs.2 'instr'
                      1334818 ~2%       {2}    | JOIN WITH AliasedSSA::MemoryLocation#4b9f223c ON FIRST 1 OUTPUT Lhs.1 'instr', Lhs.0 'result'

                      363138  ~1%       {2} r5 = JOIN r3 WITH num#MemoryAccessKind::TNonLocalMemoryAccess#b2a59f45 ON FIRST 1 OUTPUT Lhs.1 'instr', Lhs.2
                      363138  ~1%       {2}    | AND NOT `AliasedSSA::canReuseSsaForOldResult/1#280fbda5`(FIRST 1)
                      363138  ~5%       {3}    | JOIN WITH `SSAConstruction::getInstructionEnclosingIRFunction/1#d26c0476` ON FIRST 1 OUTPUT Rhs.1, Lhs.1, Lhs.0 'instr'
                      363138  ~0%       {2}    | JOIN WITH num#AliasedSSA::TAllNonLocalMemory#7ba9f6c9 ON FIRST 2 OUTPUT Rhs.2 'result', Lhs.2 'instr'
                      363138  ~0%       {2}    | JOIN WITH AliasedSSA::MemoryLocation#4b9f223c ON FIRST 1 OUTPUT Lhs.1 'instr', Lhs.0 'result'

                      1086950 ~5%       {2} r6 = JOIN r3 WITH `AliasedSSA::isIndirectOrBufferMemoryAccess/1#a6492554` ON FIRST 1 OUTPUT Lhs.1 'instr', Lhs.2
                      1086950 ~5%       {2}    | AND NOT `AliasedSSA::canReuseSsaForOldResult/1#280fbda5`(FIRST 1)

                      141434  ~0%       {2} r7 = r6 AND NOT `project#AliasedSSA::hasResultMemoryAccess/9#732473d4#7`(FIRST 1)
                      141434  ~0%       {3}    | JOIN WITH `SSAConstruction::getInstructionEnclosingIRFunction/1#d26c0476` ON FIRST 1 OUTPUT Rhs.1, Lhs.1, Lhs.0 'instr'
                      141434  ~5%       {2}    | JOIN WITH num#AliasedSSA::TUnknownMemoryLocation#e0c2a990 ON FIRST 2 OUTPUT Rhs.2 'result', Lhs.2 'instr'
                      141434  ~0%       {2}    | JOIN WITH AliasedSSA::MemoryLocation#4b9f223c ON FIRST 1 OUTPUT Lhs.1 'instr', Lhs.0 'result'

                      180541  ~0%       {2} r8 = JOIN r3 WITH num#MemoryAccessKind::TEntireAllocationMemoryAccess#503d0afb ON FIRST 1 OUTPUT Lhs.1 'instr', Lhs.2
                      180541  ~0%       {2}    | AND NOT `AliasedSSA::canReuseSsaForOldResult/1#280fbda5`(FIRST 1)
                      180541  ~3%       {4}    | JOIN WITH `Instruction::Instruction.getResultAddressOperand/0#dispred#619d4407` ON FIRST 1 OUTPUT Rhs.1, Lhs.0 'instr', _, Lhs.1
                      180541  ~0%       {3}    | REWRITE WITH Out.2 := booleanNot(In.3) KEEPING 3
                      175074  ~2%       {3}    | JOIN WITH `project#AliasAnalysis::addressOperandAllocationAndOffset/3#c64a9862` ON FIRST 1 OUTPUT Rhs.1, Lhs.1 'instr', Lhs.2
                      349412  ~0%       {4}    | JOIN WITH num#AliasedSSA::TEntireAllocationMemoryLocation#85bb24dd ON FIRST 1 OUTPUT Lhs.1 'instr', Lhs.2, Rhs.1, Rhs.2 'result'
                                        {4}    | REWRITE WITH TEST InOut.1 != InOut.2
                      174706  ~1%       {2}    | SCAN OUTPUT In.3 'result', In.0 'instr'
                      174706  ~3%       {2}    | JOIN WITH AliasedSSA::MemoryLocation#4b9f223c ON FIRST 1 OUTPUT Lhs.1 'instr', Lhs.0 'result'

                      946577  ~0%       {5} r9 = JOIN r6 WITH `project#AliasedSSA::hasResultMemoryAccess/9#732473d4#5_0512346#join_rhs` ON FIRST 2 OUTPUT Lhs.0 'instr', Lhs.1, Rhs.2, Rhs.6, _
                                        {4}    | REWRITE WITH Tmp.4 := false, TEST InOut.3 != Tmp.4 KEEPING 4
                      2122    ~6%       {5}    | SCAN OUTPUT In.2, _, In.0 'instr', _, In.1
                      2122    ~0%       {4}    | REWRITE WITH Out.1 := false, Out.3 := booleanNot(In.4) KEEPING 4
                      4244    ~104%     {4}    | JOIN WITH `AliasedSSA::getGroupedMemoryLocation/3#14ef79fc#ffbf_0213#join_rhs` ON FIRST 2 OUTPUT Lhs.2 'instr', Lhs.3, Rhs.2, Rhs.3 'result'
                                        {4}    | REWRITE WITH TEST InOut.1 != InOut.2
                      2122    ~98%      {2}    | SCAN OUTPUT In.3 'result', In.0 'instr'
                      1061    ~0%       {2}    | JOIN WITH AliasedSSA::MemoryLocation#4b9f223c ON FIRST 1 OUTPUT Lhs.1 'instr', Lhs.0 'result'

                      946577  ~0%       {8} r10 = JOIN r6 WITH `project#AliasedSSA::hasResultMemoryAccess/9#732473d4#5_0512346#join_rhs` ON FIRST 2 OUTPUT Lhs.0 'instr', Lhs.1, Rhs.2, Rhs.3, Rhs.4, Rhs.5, Rhs.6, _
                                        {7}    | REWRITE WITH Tmp.7 := false, TEST InOut.6 = Tmp.7 KEEPING 7
                      944455  ~0%       {6}    | SCAN OUTPUT In.2, In.3, In.4, In.5, In.0 'instr', In.1
                      1183383 ~2%       {8}    | JOIN WITH num#AliasedSSA::TVariableMemoryLocation#8e8cb20c_013456#join_rhs ON FIRST 4 OUTPUT Rhs.5 'result', Lhs.4 'instr', Lhs.5, Lhs.0, Lhs.1, Lhs.2, Lhs.3, Rhs.4
                      1183383 ~0%       {8}    | JOIN WITH AliasedSSA::MemoryLocation#4b9f223c ON FIRST 1 OUTPUT Lhs.1 'instr', Lhs.3, Lhs.4, Lhs.5, Lhs.6, Lhs.2, Lhs.7, Lhs.0 'result'
                      1183383 ~0%       {5}    | JOIN WITH `project#AliasedSSA::hasResultMemoryAccess/9#732473d4#6` ON FIRST 6 OUTPUT Lhs.0 'instr', Lhs.6, Lhs.7 'result', _, Lhs.5
                                        {4}    | REWRITE WITH Out.3 := booleanNot(In.4), TEST Out.3 != InOut.1 KEEPING 4
                      944455  ~3%       {2}    | SCAN OUTPUT In.0 'instr', In.2 'result'

                      2959612 ~0%       {2} r11 = r4 UNION r5 UNION r7 UNION r8 UNION r9 UNION r10
                                        return r11
```
2025-01-11 17:50:51 +01:00
Mathias Vorreiter Pedersen
5ed0222b1a C++: Sync identical files. 2024-12-17 15:28:04 +00:00
Mathias Vorreiter Pedersen
f351558547 C++: While here, let's avoid materializing 'ensuresEq' and 'ensuresLt' when computing unreachable nodes in dataflow. 2024-12-17 15:27:54 +00:00
Jeroen Ketema
f9bfd969a9 C++: Address review comments 2024-12-12 16:49:24 +01:00
Jeroen Ketema
35403d4299 C++: Fix IR printing when multiple edges point to the same block 2024-12-12 13:46:45 +01:00
REDMOND\brodes
3619b01ace Merge branch 'brodes/seh_flow_phase2_splitting_seh_edges' of https://github.com/microsoft/codeql into brodes/seh_flow_phase2_splitting_seh_edges 2024-12-05 10:50:17 -05:00
REDMOND\brodes
48c86979f0 Deleting unused predicate. 2024-12-05 10:50:06 -05:00
Ben Rodes
3115833847 Update cpp/ql/lib/semmle/code/cpp/ir/implementation/EdgeKind.qll
Co-authored-by: Jeroen Ketema <93738568+jketema@users.noreply.github.com>
2024-12-05 10:49:33 -05:00
Ben Rodes
6cbaa73d58 Update cpp/ql/lib/semmle/code/cpp/ir/implementation/EdgeKind.qll
Co-authored-by: Jeroen Ketema <93738568+jketema@users.noreply.github.com>
2024-12-05 10:48:40 -05:00