[llvm-branch-commits] [flang] [flang][OpenMP] Basic mapping of `do concurrent ... reduce` to OpenMP (PR #146033)

2025-06-27 Thread Tom Eccles via llvm-branch-commits
https://github.com/tblah approved this pull request. LGTM but please could you add a test that covers every region. https://github.com/llvm/llvm-project/pull/146033 ___ llvm-branch-commits mailing list llvm-branch-commits@lists.llvm.org https://lists.l

[llvm-branch-commits] [flang] [NFC][flang] Move `ReductionProcessor` to `Lower/Support`. (PR #146025)

2025-06-27 Thread Tom Eccles via llvm-branch-commits
https://github.com/tblah approved this pull request. https://github.com/llvm/llvm-project/pull/146025 ___ llvm-branch-commits mailing list llvm-branch-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-branch-commits

[llvm-branch-commits] [flang] [flang][fir] Small clean-up in `fir_DoConcurrentLoopOp`'s defintion (PR #146028)

2025-06-27 Thread Tom Eccles via llvm-branch-commits
https://github.com/tblah approved this pull request. https://github.com/llvm/llvm-project/pull/146028 ___ llvm-branch-commits mailing list llvm-branch-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-branch-commits

[llvm-branch-commits] [flang] [mlir] [flang][OpenMP][NFC] remove globals with mlir::StateStack (PR #144898)

2025-06-20 Thread Tom Eccles via llvm-branch-commits
https://github.com/tblah updated https://github.com/llvm/llvm-project/pull/144898 >From 392514e4d56491575ec47a1eb5607fd52f5b1ff9 Mon Sep 17 00:00:00 2001 From: Tom Eccles Date: Wed, 18 Jun 2025 21:01:13 + Subject: [PATCH 1/2] [flang][OpenMP][NFC] remove globals with mlir::StateStack Idea s

[llvm-branch-commits] [flang] [mlir] [flang][OpenMP][NFC] remove globals with mlir::StateStack (PR #144898)

2025-06-19 Thread Tom Eccles via llvm-branch-commits
tblah wrote: 1. https://github.com/llvm/llvm-project/pull/144897 2. https://github.com/llvm/llvm-project/pull/144898 https://github.com/llvm/llvm-project/pull/144898 ___ llvm-branch-commits mailing list llvm-branch-commits@lists.llvm.org https://lists.

[llvm-branch-commits] [flang] [mlir] [flang][OpenMP][NFC] remove globals with mlir::StateStack (PR #144898)

2025-06-19 Thread Tom Eccles via llvm-branch-commits
https://github.com/tblah created https://github.com/llvm/llvm-project/pull/144898 Idea suggested by @skatrak >From 280e55d4355f100b7d3066fce3c0515b369fecce Mon Sep 17 00:00:00 2001 From: Tom Eccles Date: Wed, 18 Jun 2025 21:01:13 + Subject: [PATCH] [flang][OpenMP][NFC] remove globals with

[llvm-branch-commits] [flang] [flang][OpenMP] Add symbol table scopes for `teams` and `parallel` (PR #144015)

2025-06-13 Thread Tom Eccles via llvm-branch-commits
https://github.com/tblah approved this pull request. LGTM. Thanks for the fix https://github.com/llvm/llvm-project/pull/144015 ___ llvm-branch-commits mailing list llvm-branch-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-

[llvm-branch-commits] [flang] [flang][OpenMP][NFC] Refactor to avoid global variable (PR #144087)

2025-06-13 Thread Tom Eccles via llvm-branch-commits
https://github.com/tblah created https://github.com/llvm/llvm-project/pull/144087 Based on top of #144013 I was really hoping this would also work for `hostEvalInfo` but unfortunately that needed to be shared to a greater degree. The same technique should work for that but it would need that

[llvm-branch-commits] [llvm] [OpenMP] Add directive spellings introduced in spec v6.0 (PR #141772)

2025-06-04 Thread Tom Eccles via llvm-branch-commits
https://github.com/tblah approved this pull request. https://github.com/llvm/llvm-project/pull/141772 ___ llvm-branch-commits mailing list llvm-branch-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-branch-commits

[llvm-branch-commits] [flang] [flang][OpenMP] Extend locality spec to OMP claues (`init` and `dealloc` regions) (PR #142795)

2025-06-04 Thread Tom Eccles via llvm-branch-commits
@@ -0,0 +1,51 @@ +// Tests mapping `local` locality specifier to `private` clauses for non-empty +// `init` and `dealloc` regions. + +// RUN: fir-opt --omp-do-concurrent-conversion="map-to=host" %s | FileCheck %s + +func.func @my_allocator() { + return +} + +func.func @my_dealloc

[llvm-branch-commits] [flang] [flang][OpenMP] Map basic `local` specifiers to `private` clauses (PR #142735)

2025-06-04 Thread Tom Eccles via llvm-branch-commits
https://github.com/tblah approved this pull request. Looks great! https://github.com/llvm/llvm-project/pull/142735 ___ llvm-branch-commits mailing list llvm-branch-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-branch-commi

[llvm-branch-commits] [flang] [flang] Enable delayed localization by default for `do concurrent` (PR #142567)

2025-06-04 Thread Tom Eccles via llvm-branch-commits
https://github.com/tblah approved this pull request. https://github.com/llvm/llvm-project/pull/142567 ___ llvm-branch-commits mailing list llvm-branch-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-branch-commits

[llvm-branch-commits] [llvm] [utils][TableGen] Handle versions on clause/directive spellings (PR #141766)

2025-05-29 Thread Tom Eccles via llvm-branch-commits
https://github.com/tblah approved this pull request. Thanks for the update https://github.com/llvm/llvm-project/pull/141766 ___ llvm-branch-commits mailing list llvm-branch-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-bra

[llvm-branch-commits] [llvm] [utils][TableGen] Handle versions on clause/directive spellings (PR #141766)

2025-05-29 Thread Tom Eccles via llvm-branch-commits
@@ -77,6 +77,19 @@ static std::string getIdentifierName(const Record *Rec, StringRef Prefix) { return Prefix.str() + BaseRecord(Rec).getFormattedName(); } +using RecordWithSpelling = std::pair; + +static std::vector +getSpellings(ArrayRef Records) { tblah w

[llvm-branch-commits] [llvm] [utils][TableGen] Handle versions on clause/directive spellings (PR #141766)

2025-05-29 Thread Tom Eccles via llvm-branch-commits
https://github.com/tblah approved this pull request. LGTM with one nit, but wait for a second review https://github.com/llvm/llvm-project/pull/141766 ___ llvm-branch-commits mailing list llvm-branch-commits@lists.llvm.org https://lists.llvm.org/cgi-bin

[llvm-branch-commits] [llvm] [utils][TableGen] Handle versions on clause/directive spellings (PR #141766)

2025-05-29 Thread Tom Eccles via llvm-branch-commits
@@ -77,6 +77,19 @@ static std::string getIdentifierName(const Record *Rec, StringRef Prefix) { return Prefix.str() + BaseRecord(Rec).getFormattedName(); } +using RecordWithSpelling = std::pair; + +static std::vector +getSpellings(ArrayRef Records) { tblah w

[llvm-branch-commits] [llvm] [utils][TableGen] Handle versions on clause/directive spellings (PR #141766)

2025-05-29 Thread Tom Eccles via llvm-branch-commits
https://github.com/tblah edited https://github.com/llvm/llvm-project/pull/141766 ___ llvm-branch-commits mailing list llvm-branch-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-branch-commits

[llvm-branch-commits] [llvm] [mlir] [utils][TableGen] Implement clause aliases as alternative spellings (PR #141765)

2025-05-29 Thread Tom Eccles via llvm-branch-commits
https://github.com/tblah approved this pull request. LGTM but wait for another review https://github.com/llvm/llvm-project/pull/141765 ___ llvm-branch-commits mailing list llvm-branch-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listin

[llvm-branch-commits] [llvm] [utils][TableGen] Treat clause aliases equally with names (PR #141763)

2025-05-29 Thread Tom Eccles via llvm-branch-commits
https://github.com/tblah approved this pull request. LGTM, thanks! https://github.com/llvm/llvm-project/pull/141763 ___ llvm-branch-commits mailing list llvm-branch-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-branch-comm

[llvm-branch-commits] [flang] [flang][OpenMP] use attribute for delayed privatization barrier (PR #140092)

2025-05-21 Thread Tom Eccles via llvm-branch-commits
tblah wrote: ping for review https://github.com/llvm/llvm-project/pull/140092 ___ llvm-branch-commits mailing list llvm-branch-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-branch-commits

[llvm-branch-commits] [flang] [flang][OpenMP] use attribute for delayed privatization barrier (PR #140092)

2025-05-15 Thread Tom Eccles via llvm-branch-commits
tblah wrote: PR stack: 1. https://github.com/llvm/llvm-project/pull/140089 2. https://github.com/llvm/llvm-project/pull/140090 3. https://github.com/llvm/llvm-project/pull/140092 https://github.com/llvm/llvm-project/pull/140092 ___ llvm-branch-commits

[llvm-branch-commits] [mlir] [mlir][OpenMP] Add translation of private_barrier attr to LLVMIR (PR #140090)

2025-05-15 Thread Tom Eccles via llvm-branch-commits
tblah wrote: PR stack: 1. https://github.com/llvm/llvm-project/pull/140089 2. https://github.com/llvm/llvm-project/pull/140090 3. https://github.com/llvm/llvm-project/pull/140092 https://github.com/llvm/llvm-project/pull/140090 ___ llvm-branch-commits

[llvm-branch-commits] [flang] [flang][OpenMP] use attribute for delayed privatization barrier (PR #140092)

2025-05-15 Thread Tom Eccles via llvm-branch-commits
https://github.com/tblah created https://github.com/llvm/llvm-project/pull/140092 Fixes #136357 The barrier needs to go between the copying into firstprivate variables and the initialization call for the OpenMP construct (e.g. wsloop). There is no way of expressing this in MLIR because for de

[llvm-branch-commits] [mlir] [mlir][OpenMP] Add translation of private_barrier attr to LLVMIR (PR #140090)

2025-05-15 Thread Tom Eccles via llvm-branch-commits
https://github.com/tblah created https://github.com/llvm/llvm-project/pull/140090 Part of a series to fix https://github.com/llvm/llvm-project/issues/136357 Rate limit · GitHub body { background-color: #f6f8fa; color: #24292e; font

[llvm-branch-commits] [flang] [flang][fir] Basic PFT to MLIR lowering for do concurrent locality specifiers (PR #138534)

2025-05-09 Thread Tom Eccles via llvm-branch-commits
@@ -2029,9 +2031,30 @@ class FirConverter : public Fortran::lower::AbstractConverter { void handleLocalitySpecs(const IncrementLoopInfo &info) { Fortran::semantics::SemanticsContext &semanticsContext = bridge.getSemanticsContext(); -for (const Fortran::semant

[llvm-branch-commits] [flang] [flang][OpenMP] Pass OpenMP version to getOpenMPDirectiveName (PR #139131)

2025-05-09 Thread Tom Eccles via llvm-branch-commits
https://github.com/tblah approved this pull request. LGTM, thanks! https://github.com/llvm/llvm-project/pull/139131 ___ llvm-branch-commits mailing list llvm-branch-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-branch-comm

[llvm-branch-commits] [flang] [flang][fir] Basic lowering `fir.do_concurrent` locality specs to `fir.do_loop ... unordered` (PR #138512)

2025-05-07 Thread Tom Eccles via llvm-branch-commits
@@ -162,7 +173,52 @@ class DoConcurrentConversion assert(loop.getRegion().hasOneBlock()); mlir::Block &loopBlock = loop.getRegion().getBlocks().front(); -// Collect iteration variable(s) allocations do that we can move them +// Handle localization +if (!loo

[llvm-branch-commits] [flang] [flang][fir] Basic lowering `fir.do_concurrent` locality specs to `fir.do_loop ... unordered` (PR #138512)

2025-05-07 Thread Tom Eccles via llvm-branch-commits
@@ -162,7 +173,52 @@ class DoConcurrentConversion assert(loop.getRegion().hasOneBlock()); mlir::Block &loopBlock = loop.getRegion().getBlocks().front(); -// Collect iteration variable(s) allocations do that we can move them +// Handle localization +if (!loo

[llvm-branch-commits] [flang] [flang][fir] Add `fir.local` op for locality specifiers (PR #138505)

2025-05-07 Thread Tom Eccles via llvm-branch-commits
https://github.com/tblah approved this pull request. Thanks for the updates https://github.com/llvm/llvm-project/pull/138505 ___ llvm-branch-commits mailing list llvm-branch-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-br

[llvm-branch-commits] [flang] [flang] Generlize names of delayed privatization CLI flags (PR #138816)

2025-05-07 Thread Tom Eccles via llvm-branch-commits
https://github.com/tblah approved this pull request. LGTM https://github.com/llvm/llvm-project/pull/138816 ___ llvm-branch-commits mailing list llvm-branch-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-branch-commits

[llvm-branch-commits] [flang] [flang][OpenMP] Update `do concurrent` mapping pass to use `fir.do_concurrent` op (PR #138489)

2025-05-07 Thread Tom Eccles via llvm-branch-commits
https://github.com/tblah approved this pull request. https://github.com/llvm/llvm-project/pull/138489 ___ llvm-branch-commits mailing list llvm-branch-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-branch-commits

[llvm-branch-commits] [flang] [flang][OpenMP] Update `do concurrent` mapping pass to use `fir.do_concurrent` op (PR #138489)

2025-05-07 Thread Tom Eccles via llvm-branch-commits
@@ -548,19 +357,16 @@ class DoConcurrentConversionPass return; } -llvm::DenseSet concurrentLoopsToSkip; +llvm::DenseSet concurrentLoopsToSkip; tblah wrote: My concern was that the walk order might be changed some time because I didn't reali

[llvm-branch-commits] [flang] [flang][fir] Basic lowering `fir.do_concurrent` locality specs to `fir.do_loop ... unordered` (PR #138512)

2025-05-06 Thread Tom Eccles via llvm-branch-commits
https://github.com/tblah commented: This needs a TODO message for locality specifiers which are not yet supported (as I understand it this means ones with init or dealloc regions) https://github.com/llvm/llvm-project/pull/138512 ___ llvm-branch-commit

[llvm-branch-commits] [flang] [flang][fir] Basic lowering `fir.do_concurrent` locality specs to `fir.do_loop ... unordered` (PR #138512)

2025-05-06 Thread Tom Eccles via llvm-branch-commits
https://github.com/tblah edited https://github.com/llvm/llvm-project/pull/138512 ___ llvm-branch-commits mailing list llvm-branch-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-branch-commits

[llvm-branch-commits] [flang] [flang][fir] Basic lowering `fir.do_concurrent` locality specs to `fir.do_loop ... unordered` (PR #138512)

2025-05-06 Thread Tom Eccles via llvm-branch-commits
@@ -162,7 +173,52 @@ class DoConcurrentConversion assert(loop.getRegion().hasOneBlock()); mlir::Block &loopBlock = loop.getRegion().getBlocks().front(); -// Collect iteration variable(s) allocations do that we can move them +// Handle localization +if (!loo

[llvm-branch-commits] [flang] [flang][fir] Add locality specifiers modeling to `fir.do_concurrent.loop` (PR #138506)

2025-05-06 Thread Tom Eccles via llvm-branch-commits
https://github.com/tblah approved this pull request. LGTM, thanks https://github.com/llvm/llvm-project/pull/138506 ___ llvm-branch-commits mailing list llvm-branch-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-branch-commi

[llvm-branch-commits] [flang] [flang][fir] Add `fir.local` op for locality specifiers (PR #138505)

2025-05-06 Thread Tom Eccles via llvm-branch-commits
@@ -3485,6 +3485,137 @@ def fir_BoxTotalElementsOp let hasCanonicalizer = 1; } +def YieldOp : fir_Op<"yield", +[Pure, ReturnLike, Terminator, + ParentOneOf<["LocalitySpecifierOp"]>]> { + let summary = "loop yield and termination operation"; + let description = [{ +

[llvm-branch-commits] [flang] [flang][fir] Add `fir.local` op for locality specifiers (PR #138505)

2025-05-06 Thread Tom Eccles via llvm-branch-commits
@@ -3485,6 +3485,137 @@ def fir_BoxTotalElementsOp let hasCanonicalizer = 1; } +def YieldOp : fir_Op<"yield", tblah wrote: What about the locallity specifiers requires a different terminator? Couldn't this use `fir.result`? https://github.com/llvm/llvm-pr

[llvm-branch-commits] [flang] [flang][fir] Add `fir.local` op for locality specifiers (PR #138505)

2025-05-06 Thread Tom Eccles via llvm-branch-commits
https://github.com/tblah edited https://github.com/llvm/llvm-project/pull/138505 ___ llvm-branch-commits mailing list llvm-branch-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-branch-commits

[llvm-branch-commits] [flang] [flang][fir] Add `fir.local` op for locality specifiers (PR #138505)

2025-05-06 Thread Tom Eccles via llvm-branch-commits
https://github.com/tblah commented: Please could you add a test for the verifier failures. https://github.com/llvm/llvm-project/pull/138505 ___ llvm-branch-commits mailing list llvm-branch-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/l

[llvm-branch-commits] [flang] [flang][fir] Add `fir.local` op for locality specifiers (PR #138505)

2025-05-06 Thread Tom Eccles via llvm-branch-commits
@@ -3485,6 +3485,137 @@ def fir_BoxTotalElementsOp let hasCanonicalizer = 1; } +def YieldOp : fir_Op<"yield", +[Pure, ReturnLike, Terminator, + ParentOneOf<["LocalitySpecifierOp"]>]> { + let summary = "loop yield and termination operation"; + let description = [{ +

[llvm-branch-commits] [flang] [flang][fir] Add `fir.local` op for locality specifiers (PR #138505)

2025-05-06 Thread Tom Eccles via llvm-branch-commits
@@ -3485,6 +3485,137 @@ def fir_BoxTotalElementsOp let hasCanonicalizer = 1; } +def YieldOp : fir_Op<"yield", +[Pure, ReturnLike, Terminator, + ParentOneOf<["LocalitySpecifierOp"]>]> { + let summary = "loop yield and termination operation"; + let description = [{ +

[llvm-branch-commits] [flang] [flang][OpenMP] Update `do concurrent` mapping pass to use `fir.do_concurrent` op (PR #138489)

2025-05-06 Thread Tom Eccles via llvm-branch-commits
https://github.com/tblah edited https://github.com/llvm/llvm-project/pull/138489 ___ llvm-branch-commits mailing list llvm-branch-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-branch-commits

[llvm-branch-commits] [flang] [flang][OpenMP] Update `do concurrent` mapping pass to use `fir.do_concurrent` op (PR #138489)

2025-05-06 Thread Tom Eccles via llvm-branch-commits
@@ -548,19 +357,16 @@ class DoConcurrentConversionPass return; } -llvm::DenseSet concurrentLoopsToSkip; +llvm::DenseSet concurrentLoopsToSkip; tblah wrote: The correctness of this depends upon the traversal order used by `applyFullConversio

[llvm-branch-commits] [flang] [flang][OpenMP] Update `do concurrent` mapping pass to use `fir.do_concurrent` op (PR #138489)

2025-05-06 Thread Tom Eccles via llvm-branch-commits
https://github.com/tblah commented: Thanks, looks good. Just one comment. https://github.com/llvm/llvm-project/pull/138489 ___ llvm-branch-commits mailing list llvm-branch-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-bran

[llvm-branch-commits] [flang] [mlir] [mlir][OpenMP] cancel(lation point) taskgroup LLVMIR (PR #137841)

2025-05-06 Thread Tom Eccles via llvm-branch-commits
https://github.com/tblah updated https://github.com/llvm/llvm-project/pull/137841 Rate limit · GitHub body { background-color: #f6f8fa; color: #24292e; font-family: -apple-system,BlinkMacSystemFont,Segoe UI,Helvetica,Arial,sans-ser

[llvm-branch-commits] [flang] [mlir] [mlir][OpenMP] cancel(lation point) taskgroup LLVMIR (PR #137841)

2025-04-29 Thread Tom Eccles via llvm-branch-commits
tblah wrote: PR Stack: - Cancel parallel https://github.com/llvm/llvm-project/pull/137192 - Cancel sections https://github.com/llvm/llvm-project/pull/137193 - Cancel wsloop https://github.com/llvm/llvm-project/pull/137194 - Cancellation point https://github.com/llvm/llvm-project/pull/137205 - Can

[llvm-branch-commits] [flang] [mlir] [mlir][OpenMP] cancel(lation point) taskgroup LLVMIR (PR #137841)

2025-04-29 Thread Tom Eccles via llvm-branch-commits
https://github.com/tblah created https://github.com/llvm/llvm-project/pull/137841 A cancel or cancellation point for taskgroup is always nested inside of a task inside of the taskgroup. For the task which is cancelled, it is that task which needs to be cleaned up: not the owning taskgroup. The

[llvm-branch-commits] [llvm] [mlir] [mlir][OpenMP] Convert omp.cancellation_point to LLVMIR (PR #137205)

2025-04-29 Thread Tom Eccles via llvm-branch-commits
https://github.com/tblah updated https://github.com/llvm/llvm-project/pull/137205 >From 7fbe43d895479254287466b957daa7747849e627 Mon Sep 17 00:00:00 2001 From: Tom Eccles Date: Tue, 15 Apr 2025 15:40:39 + Subject: [PATCH 1/2] [mlir][OpenMP] Convert omp.cancellation_point to LLVMIR This is

[llvm-branch-commits] [llvm] [mlir] [mlir][OpenMP] Convert omp.cancellation_point to LLVMIR (PR #137205)

2025-04-28 Thread Tom Eccles via llvm-branch-commits
tblah wrote: The new testsuite failures look unrelated to my patch https://github.com/llvm/llvm-project/pull/137205 ___ llvm-branch-commits mailing list llvm-branch-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-branch-comm

[llvm-branch-commits] [llvm] [mlir] [mlir][OpenMP] Convert omp.cancellation_point to LLVMIR (PR #137205)

2025-04-28 Thread Tom Eccles via llvm-branch-commits
https://github.com/tblah updated https://github.com/llvm/llvm-project/pull/137205 >From 1c6d8d0fc688dcd630b7077d2e7ae190a6c62361 Mon Sep 17 00:00:00 2001 From: Tom Eccles Date: Tue, 15 Apr 2025 15:40:39 + Subject: [PATCH 1/2] [mlir][OpenMP] Convert omp.cancellation_point to LLVMIR This is

[llvm-branch-commits] [llvm] [mlir] [mlir][OpenMP] Convert omp.cancellation_point to LLVMIR (PR #137205)

2025-04-28 Thread Tom Eccles via llvm-branch-commits
tblah wrote: Thanks for taking a look Michael. I think the issue was actually in an earlier patch in my series, but the UB was only triggering intermittently. The fix for Windows builds is https://github.com/llvm/llvm-project/pull/137193/commits/6c678b739d4fab204862ee057e00c3b0cc4c1946 https:

[llvm-branch-commits] [llvm] [mlir] [mlir][OpenMP] Convert omp.cancellation_point to LLVMIR (PR #137205)

2025-04-28 Thread Tom Eccles via llvm-branch-commits
https://github.com/tblah updated https://github.com/llvm/llvm-project/pull/137205 >From 1c6d8d0fc688dcd630b7077d2e7ae190a6c62361 Mon Sep 17 00:00:00 2001 From: Tom Eccles Date: Tue, 15 Apr 2025 15:40:39 + Subject: [PATCH] [mlir][OpenMP] Convert omp.cancellation_point to LLVMIR This is basi

[llvm-branch-commits] [mlir] [mlir][OpenMP] convert wsloop cancellation to LLVMIR (PR #137194)

2025-04-28 Thread Tom Eccles via llvm-branch-commits
https://github.com/tblah updated https://github.com/llvm/llvm-project/pull/137194 >From 9a8ed32eaea1a5b6a55e32b5b97f890a1fb8ecf9 Mon Sep 17 00:00:00 2001 From: Tom Eccles Date: Tue, 15 Apr 2025 15:05:50 + Subject: [PATCH] [mlir][OpenMP] convert wsloop cancellation to LLVMIR Taskloop suppor

[llvm-branch-commits] [flang] [flang][OpenACC][OpenMP] Separate implementations of ATOMIC constructs (PR #137517)

2025-04-28 Thread Tom Eccles via llvm-branch-commits
https://github.com/tblah approved this pull request. LGTM. If I didn't miss anything, this patch copies the old header code verbatim into both implementation files? https://github.com/llvm/llvm-project/pull/137517 ___ llvm-branch-commits mailing list

[llvm-branch-commits] [llvm] [mlir] [mlir][OpenMP] Convert omp.cancellation_point to LLVMIR (PR #137205)

2025-04-26 Thread Tom Eccles via llvm-branch-commits
https://github.com/tblah updated https://github.com/llvm/llvm-project/pull/137205 >From 4e97789c831bbfbfe85a9df7420df65de036b09a Mon Sep 17 00:00:00 2001 From: Tom Eccles Date: Tue, 15 Apr 2025 15:40:39 + Subject: [PATCH] [mlir][OpenMP] Convert omp.cancellation_point to LLVMIR This is basi

[llvm-branch-commits] [mlir] [mlir][OpenMP] convert wsloop cancellation to LLVMIR (PR #137194)

2025-04-26 Thread Tom Eccles via llvm-branch-commits
https://github.com/tblah updated https://github.com/llvm/llvm-project/pull/137194 >From 3a198c8800f519b4a88772c93c52b7fd08ccb131 Mon Sep 17 00:00:00 2001 From: Tom Eccles Date: Tue, 15 Apr 2025 15:05:50 + Subject: [PATCH] [mlir][OpenMP] convert wsloop cancellation to LLVMIR Taskloop suppor

[llvm-branch-commits] [llvm] [mlir] [mlir][OpenMP] Convert omp.cancel sections to LLVMIR (PR #137193)

2025-04-26 Thread Tom Eccles via llvm-branch-commits
https://github.com/tblah updated https://github.com/llvm/llvm-project/pull/137193 >From f3b8eebb37320ab748682f6a091e52e64aeec0d7 Mon Sep 17 00:00:00 2001 From: Tom Eccles Date: Thu, 10 Apr 2025 11:43:18 + Subject: [PATCH] [mlir][OpenMP] Convert omp.cancel sections to LLVMIR This is quite u

[llvm-branch-commits] [mlir] [mlir][OpenMP] convert wsloop cancellation to LLVMIR (PR #137194)

2025-04-25 Thread Tom Eccles via llvm-branch-commits
https://github.com/tblah updated https://github.com/llvm/llvm-project/pull/137194 >From bb1af0154c62a622775f0f05cbdc486de69266c9 Mon Sep 17 00:00:00 2001 From: Tom Eccles Date: Tue, 15 Apr 2025 15:05:50 + Subject: [PATCH] [mlir][OpenMP] convert wsloop cancellation to LLVMIR Taskloop suppor

[llvm-branch-commits] [llvm] [mlir] [mlir][OpenMP] Convert omp.cancel sections to LLVMIR (PR #137193)

2025-04-25 Thread Tom Eccles via llvm-branch-commits
https://github.com/tblah updated https://github.com/llvm/llvm-project/pull/137193 >From 4d28bd8f0106321af6679e9b155fd36ef2f919fc Mon Sep 17 00:00:00 2001 From: Tom Eccles Date: Thu, 10 Apr 2025 11:43:18 + Subject: [PATCH] [mlir][OpenMP] Convert omp.cancel sections to LLVMIR This is quite u

[llvm-branch-commits] [llvm] [mlir] [mlir][OpenMP] Convert omp.cancel sections to LLVMIR (PR #137193)

2025-04-24 Thread Tom Eccles via llvm-branch-commits
https://github.com/tblah created https://github.com/llvm/llvm-project/pull/137193 This is quite ugly but it is the best I could think of. The old FiniCBWrapper was way too brittle depending upon the exact block structure inside of the section, and could be confused by any control flow in the s

[llvm-branch-commits] [mlir] [mlir][OpenMP] convert wsloop cancellation to LLVMIR (PR #137194)

2025-04-24 Thread Tom Eccles via llvm-branch-commits
tblah wrote: PR Stack: - Cancel parallel https://github.com/llvm/llvm-project/pull/137192 - Cancel sections https://github.com/llvm/llvm-project/pull/137193 - Cancel wsloop https://github.com/llvm/llvm-project/pull/137194 - Cancellation point (TODO) - Cancel(lation point) taskgroup (TODO) https:

[llvm-branch-commits] [llvm] [mlir] [mlir][OpenMP] Convert omp.cancellation_point to LLVMIR (PR #137205)

2025-04-24 Thread Tom Eccles via llvm-branch-commits
https://github.com/tblah created https://github.com/llvm/llvm-project/pull/137205 This is basically identical to cancel except without the if clause. taskgroup will be implemented in a followup PR. >From 88fc39d0b2a3a846006889d4320b9f29ced025b7 Mon Sep 17 00:00:00 2001 From: Tom Eccles Date:

[llvm-branch-commits] [llvm] [mlir] [mlir][OpenMP] Convert omp.cancel sections to LLVMIR (PR #137193)

2025-04-24 Thread Tom Eccles via llvm-branch-commits
tblah wrote: PR Stack: Cancel parallel https://github.com/llvm/llvm-project/pull/137192 Cancel sections https://github.com/llvm/llvm-project/pull/137193 Cancel wsloop https://github.com/llvm/llvm-project/pull/137194 Cancellation point (TODO) Cancel(lation point) taskgroup (TODO) https://g

[llvm-branch-commits] [llvm] [mlir] [mlir][OpenMP] Convert omp.cancellation_point to LLVMIR (PR #137205)

2025-04-24 Thread Tom Eccles via llvm-branch-commits
tblah wrote: PR Stack: - Cancel parallel https://github.com/llvm/llvm-project/pull/137192 - Cancel sections https://github.com/llvm/llvm-project/pull/137193 - Cancel wsloop https://github.com/llvm/llvm-project/pull/137194 - Cancellation point https://github.com/llvm/llvm-project/pull/137205 - Can

[llvm-branch-commits] [mlir] [mlir][OpenMP] convert wsloop cancellation to LLVMIR (PR #137194)

2025-04-24 Thread Tom Eccles via llvm-branch-commits
https://github.com/tblah created https://github.com/llvm/llvm-project/pull/137194 Taskloop support will follow in a later patch. >From bb374c9f98cb13e55c9ce7d129f567428e58c24e Mon Sep 17 00:00:00 2001 From: Tom Eccles Date: Tue, 15 Apr 2025 15:05:50 + Subject: [PATCH] [mlir][OpenMP] conver

[llvm-branch-commits] [flang] [flang][OpenMP] Extend common::AtomicDefaultMemOrderType enumeration (PR #136312)

2025-04-22 Thread Tom Eccles via llvm-branch-commits
https://github.com/tblah approved this pull request. LGTM, thanks https://github.com/llvm/llvm-project/pull/136312 ___ llvm-branch-commits mailing list llvm-branch-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-branch-commi

[llvm-branch-commits] [flang] [flang][OpenMP] Use OmpMemoryOrderType enumeration in FAIL clause (PR #136313)

2025-04-22 Thread Tom Eccles via llvm-branch-commits
https://github.com/tblah approved this pull request. LGTM, thanks https://github.com/llvm/llvm-project/pull/136313 ___ llvm-branch-commits mailing list llvm-branch-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-branch-commi

[llvm-branch-commits] [flang] [flang][OpenMP] Use OmpMemoryOrderType enumeration in FAIL clause (PR #136313)

2025-04-22 Thread Tom Eccles via llvm-branch-commits
@@ -4242,9 +4242,8 @@ struct OmpDeviceTypeClause { // OMP 5.2 15.8.3 extended-atomic, fail-clause -> //FAIL(memory-order) struct OmpFailClause { - WRAPPER_CLASS_BOILERPLATE( - OmpFailClause, common::Indirection); - CharBlock source; tblah wrote: Why

[llvm-branch-commits] [flang] [flang][OpenMP] Use OmpMemoryOrderType enumeration in FAIL clause (PR #136313)

2025-04-22 Thread Tom Eccles via llvm-branch-commits
https://github.com/tblah edited https://github.com/llvm/llvm-project/pull/136313 ___ llvm-branch-commits mailing list llvm-branch-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-branch-commits

[llvm-branch-commits] [flang] [flang][OpenMP][HLFIR] Support vector subscripted array sections for DEPEND (PR #133892)

2025-04-07 Thread Tom Eccles via llvm-branch-commits
tblah wrote: Ping for review. @vzakhari are you happy with the change to `hlfir.elemental_addr`? https://github.com/llvm/llvm-project/pull/133892 ___ llvm-branch-commits mailing list llvm-branch-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/ma

[llvm-branch-commits] [mlir] [OpenMP][MLIR] Refactor code related to collecting privatizer info into a shared util (PR #131582)

2025-03-17 Thread Tom Eccles via llvm-branch-commits
https://github.com/tblah approved this pull request. Nice cleanup. I think this is a NFC? Could you add that to the commit title LGTM https://github.com/llvm/llvm-project/pull/131582 ___ llvm-branch-commits mailing list llvm-branch-commits@lists.llvm.

[llvm-branch-commits] [flang] [flang][OpenMP] Enable delayed privatization by default for `omp.distribute` (PR #131574)

2025-03-17 Thread Tom Eccles via llvm-branch-commits
tblah wrote: Have you run any testsuites on this? If so please add that to the commit description. https://github.com/llvm/llvm-project/pull/131574 ___ llvm-branch-commits mailing list llvm-branch-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/

[llvm-branch-commits] [mlir] [MLIR][OpenMP] Minor improvements to BlockArgOpenMPOpInterface, NFC (PR #130789)

2025-03-11 Thread Tom Eccles via llvm-branch-commits
https://github.com/tblah approved this pull request. LGTM, thanks https://github.com/llvm/llvm-project/pull/130789 ___ llvm-branch-commits mailing list llvm-branch-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-branch-commi

[llvm-branch-commits] [flang] Reland " [flang] Rely on global initialization for simpler derived types" (PR #130290)

2025-03-07 Thread Tom Eccles via llvm-branch-commits
https://github.com/tblah approved this pull request. Thank you for the quick fix. This does fix the issue I saw. https://github.com/llvm/llvm-project/pull/130290 ___ llvm-branch-commits mailing list llvm-branch-commits@lists.llvm.org https://lists.llvm

[llvm-branch-commits] [flang] [mlir] [mlir][OpenMP] Pack task private variables into a heap-allocated context struct (PR #125307)

2025-02-26 Thread Tom Eccles via llvm-branch-commits
tblah wrote: Apologies for the comments I missed. I'm not sure how that happened. Thanks for carefully checking each one. https://github.com/llvm/llvm-project/pull/125307 ___ llvm-branch-commits mailing list llvm-branch-commits@lists.llvm.org https://

[llvm-branch-commits] [flang] [mlir] [mlir][OpenMP] Pack task private variables into a heap-allocated context struct (PR #125307)

2025-02-26 Thread Tom Eccles via llvm-branch-commits
https://github.com/tblah updated https://github.com/llvm/llvm-project/pull/125307 >From df47461dcf1f9244da472efdcc57d266ecd42b34 Mon Sep 17 00:00:00 2001 From: Tom Eccles Date: Fri, 24 Jan 2025 17:32:41 + Subject: [PATCH 01/12] [mlir][OpenMP] Pack task private variables into a heap-allocat

[llvm-branch-commits] [flang] release/20.x: [flang] fix AArch64 PCS for struct following pointer (#127802) (PR #128518)

2025-02-25 Thread Tom Eccles via llvm-branch-commits
https://github.com/tblah approved this pull request. https://github.com/llvm/llvm-project/pull/128518 ___ llvm-branch-commits mailing list llvm-branch-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-branch-commits

[llvm-branch-commits] [flang] release/20.x: [flang] fix AArch64 PCS for struct following pointer (#127802) (PR #128518)

2025-02-24 Thread Tom Eccles via llvm-branch-commits
tblah wrote: This looks good to me but I am unsure what the exact interpretation of the [rules](https://llvm.org/docs/HowToReleaseLLVM.html#release-patch-rules) should be. > Before RC3/Final Major Release Patches should be limited to critical bugs or > regressions. This is not fixing a regres

[llvm-branch-commits] [flang] [mlir] [mlir][OpenMP] Pack task private variables into a heap-allocated context struct (PR #125307)

2025-02-24 Thread Tom Eccles via llvm-branch-commits
tblah wrote: This is now rebased on top of current main and ready for review. Apologies for the delay, I was on holiday and rebasing required rethinking how insertion points worked. @ergawy I changed the signature of `initPrivateVar` so that the correct private variable SSA value is returned

[llvm-branch-commits] [flang] [mlir] [mlir][OpenMP] Pack task private variables into a heap-allocated context struct (PR #125307)

2025-02-24 Thread Tom Eccles via llvm-branch-commits
@@ -1794,37 +1909,118 @@ convertOmpTaskOp(omp::TaskOp taskOp, llvm::IRBuilderBase &builder, moduleTranslation, allocaIP); // Allocate and initialize private variables - // TODO: package private variables up in a structure builder.SetInsertPoint(initBlock->getTermi

[llvm-branch-commits] [flang] [mlir] [mlir][OpenMP] Pack task private variables into a heap-allocated context struct (PR #125307)

2025-02-24 Thread Tom Eccles via llvm-branch-commits
@@ -1794,37 +1909,118 @@ convertOmpTaskOp(omp::TaskOp taskOp, llvm::IRBuilderBase &builder, moduleTranslation, allocaIP); // Allocate and initialize private variables - // TODO: package private variables up in a structure builder.SetInsertPoint(initBlock->getTermi

[llvm-branch-commits] [flang] [mlir] [mlir][OpenMP] Pack task private variables into a heap-allocated context struct (PR #125307)

2025-02-24 Thread Tom Eccles via llvm-branch-commits
@@ -1794,37 +1909,118 @@ convertOmpTaskOp(omp::TaskOp taskOp, llvm::IRBuilderBase &builder, moduleTranslation, allocaIP); // Allocate and initialize private variables - // TODO: package private variables up in a structure builder.SetInsertPoint(initBlock->getTermi

[llvm-branch-commits] [flang] [mlir] [mlir][OpenMP] Pack task private variables into a heap-allocated context struct (PR #125307)

2025-02-24 Thread Tom Eccles via llvm-branch-commits
@@ -1794,37 +1909,118 @@ convertOmpTaskOp(omp::TaskOp taskOp, llvm::IRBuilderBase &builder, moduleTranslation, allocaIP); // Allocate and initialize private variables - // TODO: package private variables up in a structure builder.SetInsertPoint(initBlock->getTermi

[llvm-branch-commits] [flang] [mlir] [mlir][OpenMP] Pack task private variables into a heap-allocated context struct (PR #125307)

2025-02-24 Thread Tom Eccles via llvm-branch-commits
@@ -1794,37 +1909,118 @@ convertOmpTaskOp(omp::TaskOp taskOp, llvm::IRBuilderBase &builder, moduleTranslation, allocaIP); // Allocate and initialize private variables - // TODO: package private variables up in a structure builder.SetInsertPoint(initBlock->getTermi

[llvm-branch-commits] [flang] [mlir] [mlir][OpenMP] Pack task private variables into a heap-allocated context struct (PR #125307)

2025-02-24 Thread Tom Eccles via llvm-branch-commits
@@ -1794,37 +1909,118 @@ convertOmpTaskOp(omp::TaskOp taskOp, llvm::IRBuilderBase &builder, moduleTranslation, allocaIP); // Allocate and initialize private variables - // TODO: package private variables up in a structure builder.SetInsertPoint(initBlock->getTermi

[llvm-branch-commits] [flang] [mlir] [mlir][OpenMP] Pack task private variables into a heap-allocated context struct (PR #125307)

2025-02-24 Thread Tom Eccles via llvm-branch-commits
@@ -1331,19 +1334,16 @@ findAssociatedValue(Value privateVar, llvm::IRBuilderBase &builder, /// Initialize a single (first)private variable. You probably want to use /// allocateAndInitPrivateVars instead of this. -static llvm::Error -initPrivateVar(llvm::IRBuilderBase &build

[llvm-branch-commits] [flang] [mlir] [mlir][OpenMP] Pack task private variables into a heap-allocated context struct (PR #125307)

2025-02-24 Thread Tom Eccles via llvm-branch-commits
@@ -1415,11 +1413,13 @@ static llvm::Expected allocateAndInitPrivateVars( llvm::Value *llvmPrivateVar = builder.CreateAlloca( llvmAllocType, /*ArraySize=*/nullptr, "omp.private.alloc"); -llvm::Error err = initPrivateVar( +llvm::Expected privateVarOrError =

[llvm-branch-commits] [flang] [mlir] [mlir][OpenMP] Pack task private variables into a heap-allocated context struct (PR #125307)

2025-02-24 Thread Tom Eccles via llvm-branch-commits
@@ -146,13 +146,24 @@ def PrivateClauseOp : OpenMP_Op<"private", [IsolatedFromAbove, RecipeInterface]> return region.empty() ? nullptr : region.getArgument(0); } +/// Returns true if the init region might read from the mold argument +bool initReadsFromMold()

[llvm-branch-commits] [flang] [mlir] [mlir][OpenMP] Pack task private variables into a heap-allocated context struct (PR #125307)

2025-02-24 Thread Tom Eccles via llvm-branch-commits
https://github.com/tblah updated https://github.com/llvm/llvm-project/pull/125307 >From df47461dcf1f9244da472efdcc57d266ecd42b34 Mon Sep 17 00:00:00 2001 From: Tom Eccles Date: Fri, 24 Jan 2025 17:32:41 + Subject: [PATCH 01/11] [mlir][OpenMP] Pack task private variables into a heap-allocat

[llvm-branch-commits] [llvm] [OpenMPIRBuilder] Split calculation of canonical loop trip count, NFC (PR #127820)

2025-02-19 Thread Tom Eccles via llvm-branch-commits
https://github.com/tblah approved this pull request. LGTM, thanks! https://github.com/llvm/llvm-project/pull/127820 ___ llvm-branch-commits mailing list llvm-branch-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-branch-comm

[llvm-branch-commits] [flang] [flang][Lower][OpenMP] Don't read moldarg for static sized array (PR #125901)

2025-02-06 Thread Tom Eccles via llvm-branch-commits
https://github.com/tblah updated https://github.com/llvm/llvm-project/pull/125901 >From 8a7e449cfa357e18ba094cc61d14bf481668ddcd Mon Sep 17 00:00:00 2001 From: Tom Eccles Date: Wed, 5 Feb 2025 17:29:42 + Subject: [PATCH] [flang][Lower][OpenMP] Don't read moldarg for static sized array Thi

[llvm-branch-commits] [flang] [mlir] [mlir][OpenMP] Pack task private variables into a heap-allocated context struct (PR #125307)

2025-02-06 Thread Tom Eccles via llvm-branch-commits
https://github.com/tblah updated https://github.com/llvm/llvm-project/pull/125307 >From 06831df6909ff246ccd541e4f4c39fd47fd993a4 Mon Sep 17 00:00:00 2001 From: Tom Eccles Date: Fri, 24 Jan 2025 17:32:41 + Subject: [PATCH 01/12] [mlir][OpenMP] Pack task private variables into a heap-allocat

[llvm-branch-commits] [flang] [mlir] [mlir][OpenMP] Pack task private variables into a heap-allocated context struct (PR #125307)

2025-02-05 Thread Tom Eccles via llvm-branch-commits
https://github.com/tblah edited https://github.com/llvm/llvm-project/pull/125307 ___ llvm-branch-commits mailing list llvm-branch-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-branch-commits

[llvm-branch-commits] [flang] [mlir] [mlir][OpenMP] Pack task private variables into a heap-allocated context struct (PR #125307)

2025-02-05 Thread Tom Eccles via llvm-branch-commits
@@ -1796,36 +1918,110 @@ convertOmpTaskOp(omp::TaskOp taskOp, llvm::IRBuilderBase &builder, // Allocate and initialize private variables // TODO: package private variables up in a structure builder.SetInsertPoint(initBlock->getTerminator()); - for (auto [privDecl, mlirP

[llvm-branch-commits] [flang] [mlir] [mlir][OpenMP] Pack task private variables into a heap-allocated context struct (PR #125307)

2025-02-05 Thread Tom Eccles via llvm-branch-commits
https://github.com/tblah updated https://github.com/llvm/llvm-project/pull/125307 >From afa9026eefb6c9cd613ed021a92e159f93c3667c Mon Sep 17 00:00:00 2001 From: Tom Eccles Date: Fri, 24 Jan 2025 17:32:41 + Subject: [PATCH 1/8] [mlir][OpenMP] Pack task private variables into a heap-allocated

[llvm-branch-commits] [mlir] [mlir][OpenMP] Pack task private variables into a heap-allocated context struct (PR #125307)

2025-02-05 Thread Tom Eccles via llvm-branch-commits
https://github.com/tblah edited https://github.com/llvm/llvm-project/pull/125307 ___ llvm-branch-commits mailing list llvm-branch-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-branch-commits

[llvm-branch-commits] [mlir] [mlir][OpenMP] Pack task private variables into a heap-allocated context struct (PR #125307)

2025-02-05 Thread Tom Eccles via llvm-branch-commits
@@ -1796,36 +1918,110 @@ convertOmpTaskOp(omp::TaskOp taskOp, llvm::IRBuilderBase &builder, // Allocate and initialize private variables // TODO: package private variables up in a structure builder.SetInsertPoint(initBlock->getTerminator()); - for (auto [privDecl, mlirP

[llvm-branch-commits] [mlir] [mlir][OpenMP] Pack task private variables into a heap-allocated context struct (PR #125307)

2025-02-05 Thread Tom Eccles via llvm-branch-commits
@@ -1730,6 +1730,126 @@ buildDependData(std::optional dependKinds, OperandRange dependVars, } } +static bool privatizerReadsSourceVariable(omp::PrivateClauseOp &priv) { + if (priv.getDataSharingType() == omp::DataSharingClauseType::FirstPrivate) +return true; + + Regi

[llvm-branch-commits] [mlir] [mlir][OpenMP] Pack task private variables into a heap-allocated context struct (PR #125307)

2025-02-05 Thread Tom Eccles via llvm-branch-commits
@@ -1730,6 +1730,126 @@ buildDependData(std::optional dependKinds, OperandRange dependVars, } } +static bool privatizerReadsSourceVariable(omp::PrivateClauseOp &priv) { + if (priv.getDataSharingType() == omp::DataSharingClauseType::FirstPrivate) +return true; + + Regi

  1   2   3   4   >