search for: convergencectrl

Displaying 5 results from an estimated 5 matches for "convergencectrl".

2020 Aug 17
2
[RFC] Introducing convergence control bundles and intrinsics
...t anl.gov> wrote: > Thanks for sending this. What do you think that we should do with the > existing convergent attribute? My preference, which is implicitly expressed in the review, is to use `convergent` both for the new and the old thing. They are implicitly distinguished via the "convergencectrl" operand bundle. The main reason for going down that route is that `convergent` is really an odd duck in that it is the only attribute in LLVM that _adds_ new constraints on program transforms. All other attributes _remove_ constraints on program transforms by expressing constraints on what t...
2020 Aug 09
2
[RFC] Introducing convergence control bundles and intrinsics
...strate here how this solves the example above. To obtain the original natural loop alignment, we augment the example as follows: A: %anchor = call token @llvm.experimental.convergence.anchor() br label %B B: %loop = call token @llvm.experimental.convergence.loop() [ "convergencectrl"(token %anchor) ] ... %sum.b = call i32 @subgroupAdd(i32 %v) [ "convergencectrl"(token %loop) ] ... br i1 %cc1, label %B, label %C C: ... br i1 %cc2, label %B, label %D D: ; loop exit To obtain the loop nest alignment, we augment it as fol...
2020 Aug 17
2
[RFC] Introducing convergence control bundles and intrinsics
...ending this. What do you think that we should do with the > >> existing convergent attribute? > > My preference, which is implicitly expressed in the review, is to use > > `convergent` both for the new and the old thing. They are implicitly > > distinguished via the "convergencectrl" operand bundle. > > > > The main reason for going down that route is that `convergent` is > > really an odd duck in that it is the only attribute in LLVM that > > _adds_ new constraints on program transforms. All other attributes > > _remove_ constraints on progr...
2020 Aug 09
2
_mm_lfence in both pathes of an if/else are hoisted by SimplfyCFG potentially breaking use as a speculation barrier
...ic perspective, the constraints added to program transforms there are sufficient for what you need. You'd produce IR such as: %token = call token @llvm.experimental.convergence.anchor() br i1 %c, label %then, label %else then: call void @llvm.x86.sse2.lfence() convergent [ "convergencectrl"(token%token) ] ... else: call void @llvm.x86.sse2.lfence() convergent [ "convergencectrl"(token %token) ] ... ... and this would prevent the hoisting of the lfences. The puzzle to me is whether one can justify this use of the convergence tokens from a theoretical p...
2020 Jul 28
2
_mm_lfence in both pathes of an if/else are hoisted by SimplfyCFG potentially breaking use as a speculation barrier
_mm_lfence was originally documented as a load fence. But in light of speculative execution vulnerabilities it has started being advertised as a way to prevent speculative execution. Current Intel Software Development Manual documents it as "Specifically, LFENCE does not execute until all prior instructions have completed locally, and no later instruction begins execution until LFENCE