[llvm] [PowerPC] Add PPC cost model support for partial reductions (PR #214760)

via llvm-commits llvm-commits at lists.llvm.org
Fri Aug 7 08:53:57 PDT 2026


github-actions[bot] wrote:

<!--PREMERGE ADVISOR COMMENT: Windows-->
# :window: Windows x64 Test Results

* 139435 tests passed
* 3644 tests skipped
* 1 test failed

## Failed Tests
(click on a test name to see its output)

### LLVM
<details>
<summary>LLVM.Transforms/LoopVectorize/PowerPC/partial-red.ll</summary>

```
Exit Code: 1

Command Output (stdout):
--
# RUN: at line 2
c:\_work\llvm-project\llvm-project\build\bin\opt.exe -vectorizer-maximize-bandwidth -mcpu=pwr8 -S -passes=loop-vectorize < C:\_work\llvm-project\llvm-project\llvm\test\Transforms\LoopVectorize\PowerPC\partial-red.ll | c:\_work\llvm-project\llvm-project\build\bin\filecheck.exe --check-prefix=P8CHECK C:\_work\llvm-project\llvm-project\llvm\test\Transforms\LoopVectorize\PowerPC\partial-red.ll
# executed command: 'c:\_work\llvm-project\llvm-project\build\bin\opt.exe' -vectorizer-maximize-bandwidth -mcpu=pwr8 -S -passes=loop-vectorize
# note: command had no output on stdout or stderr
# executed command: 'c:\_work\llvm-project\llvm-project\build\bin\filecheck.exe' --check-prefix=P8CHECK 'C:\_work\llvm-project\llvm-project\llvm\test\Transforms\LoopVectorize\PowerPC\partial-red.ll'
# .---command stderr------------
# | C:\_work\llvm-project\llvm-project\llvm\test\Transforms\LoopVectorize\PowerPC\partial-red.ll:23:17: error: P8CHECK-NEXT: expected string not found in input
# | ; P8CHECK-NEXT: [[N_MOD_VF:%.*]] = urem i64 [[N]], 128
# |                 ^
# | <stdin>:19:11: note: scanning from here
# | vector.ph: ; preds = %vector.main.loop.iter.check
# |           ^
# | <stdin>:19:11: note: with "N" equal to "%n"
# | vector.ph: ; preds = %vector.main.loop.iter.check
# |           ^
# | <stdin>:19:11: note: pattern attempts to capture variables: "N_MOD_VF"
# | vector.ph: ; preds = %vector.main.loop.iter.check
# |           ^
# | <stdin>:20:2: note: possible intended match here
# |  %0 = and i64 %n, 127
# |  ^
# | C:\_work\llvm-project\llvm-project\llvm\test\Transforms\LoopVectorize\PowerPC\partial-red.ll:524:17: error: P8CHECK-NEXT: expected string not found in input
# | ; P8CHECK-NEXT: [[N_MOD_VF:%.*]] = urem i64 [[N]], 64
# |                 ^
# | <stdin>:188:11: note: scanning from here
# | vector.ph: ; preds = %vector.main.loop.iter.check
# |           ^
# | <stdin>:188:11: note: with "N" equal to "%n"
# | vector.ph: ; preds = %vector.main.loop.iter.check
# |           ^
# | <stdin>:188:11: note: pattern attempts to capture variables: "N_MOD_VF"
# | vector.ph: ; preds = %vector.main.loop.iter.check
# |           ^
# | <stdin>:189:2: note: possible intended match here
# |  %0 = and i64 %n, 63
# |  ^
# | C:\_work\llvm-project\llvm-project\llvm\test\Transforms\LoopVectorize\PowerPC\partial-red.ll:938:17: error: P8CHECK-NEXT: expected string not found in input
# | ; P8CHECK-NEXT: [[N_MOD_VF:%.*]] = urem i64 [[N]], 64
# |                 ^
# | <stdin>:317:11: note: scanning from here
# | vector.ph: ; preds = %vector.main.loop.iter.check
# |           ^
# | <stdin>:317:11: note: with "N" equal to "%n"
# | vector.ph: ; preds = %vector.main.loop.iter.check
# |           ^
# | <stdin>:317:11: note: pattern attempts to capture variables: "N_MOD_VF"
# | vector.ph: ; preds = %vector.main.loop.iter.check
# |           ^
# | <stdin>:318:2: note: possible intended match here
# |  %0 = and i64 %n, 63
# |  ^
# | C:\_work\llvm-project\llvm-project\llvm\test\Transforms\LoopVectorize\PowerPC\partial-red.ll:1432:17: error: P8CHECK-NEXT: expected string not found in input
# | ; P8CHECK-NEXT: [[N_MOD_VF:%.*]] = urem i64 [[N]], 64
# |                 ^
# | <stdin>:486:11: note: scanning from here
# | vector.ph: ; preds = %vector.main.loop.iter.check
# |           ^
# | <stdin>:486:11: note: with "N" equal to "%n"
# | vector.ph: ; preds = %vector.main.loop.iter.check
# |           ^
# | <stdin>:486:11: note: pattern attempts to capture variables: "N_MOD_VF"
# | vector.ph: ; preds = %vector.main.loop.iter.check
# |           ^
# | <stdin>:487:2: note: possible intended match here
# |  %0 = and i64 %n, 63
# |  ^
# | 
# | Input file: <stdin>
# | Check file: C:\_work\llvm-project\llvm-project\llvm\test\Transforms\LoopVectorize\PowerPC\partial-red.ll
# | 
# | -dump-input=help explains the following input dump.
# | 
# | Input was:
# | <<<<<<
# |              .
# |              .
# |              .
# |             14:  
# |             15: vector.main.loop.iter.check: ; preds = %iter.check 
# |             16:  %min.iters.check1 = icmp ult i64 %n, 128 
# |             17:  br i1 %min.iters.check1, label %vec.epilog.ph, label %vector.ph 
# |             18:  
# |             19: vector.ph: ; preds = %vector.main.loop.iter.check 
# | next:23'0                {                                          search range start (exclusive)
# | next:23'1                                                           error: no match found in search range
# | next:23'2                                                           with "N" equal to "%n"
# | next:23'3                                                           pattern attempts to capture variables: "N_MOD_VF"
# |             20:  %0 = and i64 %n, 127 
# | next:23'4        ?                      possible intended match
# |             21:  %n.vec = sub i64 %n, %0 
# |             22:  br label %vector.body 
# |             23:  
# |             24: vector.body: ; preds = %vector.body, %vector.ph 
# |             25:  %index = phi i64 [ 0, %vector.ph ], [ %index.next, %vector.body ] 
# |              .
# |              .
# |              .
# |            170:  %inc = add nuw nsw i64 %i.09, 1 
# |            171:  %exitcond.not = icmp eq i64 %inc, %n 
# |            172:  br i1 %exitcond.not, label %for.cond.cleanup.loopexit, label %for.body, !llvm.loop !15 
# |            173: } 
# |            174:  
# |            175: define dso_local signext i32 @dots8(ptr noundef readonly captures(none) %a, ptr noundef readonly captures(none) %b, i64 noundef %n) local_unnamed_addr #0 { 
# | next:23'5                                           }                                                                                                                         search range end (exclusive)
# |            176: entry: 
# |            177:  %cmp7 = icmp sgt i64 %n, 0 
# |            178:  br i1 %cmp7, label %iter.check, label %for.cond.cleanup 
# |            179:  
# |            180: iter.check: ; preds = %entry 
# |            181:  %min.iters.check = icmp ult i64 %n, 4 
# |            182:  br i1 %min.iters.check, label %vec.epilog.scalar.ph, label %vector.main.loop.iter.check 
# |            183:  
# |            184: vector.main.loop.iter.check: ; preds = %iter.check 
# |            185:  %min.iters.check1 = icmp ult i64 %n, 64 
# |            186:  br i1 %min.iters.check1, label %vec.epilog.ph, label %vector.ph 
# |            187:  
# |            188: vector.ph: ; preds = %vector.main.loop.iter.check 
# | next:524'0               {                                          search range start (exclusive)
# | next:524'1                                                          error: no match found in search range
# | next:524'2                                                          with "N" equal to "%n"
# | next:524'3                                                          pattern attempts to capture variables: "N_MOD_VF"
# |            189:  %0 = and i64 %n, 63 
# | next:524'4       ?                     possible intended match
# |            190:  %n.vec = sub i64 %n, %0 
# |            191:  br label %vector.body 
# |            192:  
# |            193: vector.body: ; preds = %vector.body, %vector.ph 
# |            194:  %index = phi i64 [ 0, %vector.ph ], [ %index.next, %vector.body ] 
# |              .
# |              .
# |              .
# |            299:  %inc = add nuw nsw i64 %i.09, 1 
# |            300:  %exitcond.not = icmp eq i64 %inc, %n 
# |            301:  br i1 %exitcond.not, label %for.cond.cleanup.loopexit, label %for.body, !llvm.loop !19 
# |            302: } 
# |            303:  
# |            304: define dso_local signext range(i32 0, -2147483648) i32 @dotu16(ptr noundef readonly captures(none) %a, ptr noundef readonly captures(none) %b, i64 noundef %n) local_unnamed_addr #0 { 
# | next:524'5                                                                     }                                                                                                                         search range end (exclusive)
# |            305: entry: 
# |            306:  %cmp7 = icmp sgt i64 %n, 0 
# |            307:  br i1 %cmp7, label %iter.check, label %for.cond.cleanup 
# |            308:  
# |            309: iter.check: ; preds = %entry 
# |            310:  %min.iters.check = icmp ult i64 %n, 8 
# |            311:  br i1 %min.iters.check, label %vec.epilog.scalar.ph, label %vector.main.loop.iter.check 
# |            312:  
# |            313: vector.main.loop.iter.check: ; preds = %iter.check 
# |            314:  %min.iters.check1 = icmp ult i64 %n, 64 
# |            315:  br i1 %min.iters.check1, label %vec.epilog.ph, label %vector.ph 
# |            316:  
# |            317: vector.ph: ; preds = %vector.main.loop.iter.check 
# | next:938'0               {                                          search range start (exclusive)
# | next:938'1                                                          error: no match found in search range
# | next:938'2                                                          with "N" equal to "%n"
# | next:938'3                                                          pattern attempts to capture variables: "N_MOD_VF"
# |            318:  %0 = and i64 %n, 63 
# | next:938'4       ?                     possible intended match
# |            319:  %n.vec = sub i64 %n, %0 
# |            320:  br label %vector.body 
# |            321:  
# |            322: vector.body: ; preds = %vector.body, %vector.ph 
# |            323:  %index = phi i64 [ 0, %vector.ph ], [ %index.next, %vector.body ] 
# |              .
# |              .
# |              .
# |            468:  %inc = add nuw nsw i64 %i.09, 1 
# |            469:  %exitcond.not = icmp eq i64 %inc, %n 
# |            470:  br i1 %exitcond.not, label %for.cond.cleanup.loopexit, label %for.body, !llvm.loop !25 
# |            471: } 
# |            472:  
# |            473: define dso_local signext i32 @dots16(ptr noundef readonly captures(none) %a, ptr noundef readonly captures(none) %b, i64 noundef %n) local_unnamed_addr #0 { 
# | next:938'5                                           }                                                                                                                         search range end (exclusive)
# |            474: entry: 
# |            475:  %cmp7 = icmp sgt i64 %n, 0 
# |            476:  br i1 %cmp7, label %iter.check, label %for.cond.cleanup 
# |            477:  
# |            478: iter.check: ; preds = %entry 
# |            479:  %min.iters.check = icmp ult i64 %n, 8 
# |            480:  br i1 %min.iters.check, label %vec.epilog.scalar.ph, label %vector.main.loop.iter.check 
# |            481:  
# |            482: vector.main.loop.iter.check: ; preds = %iter.check 
# |            483:  %min.iters.check1 = icmp ult i64 %n, 64 
# |            484:  br i1 %min.iters.check1, label %vec.epilog.ph, label %vector.ph 
# |            485:  
# |            486: vector.ph: ; preds = %vector.main.loop.iter.check 
# | next:1432'0              {                                          search range start (exclusive)
# | next:1432'1                                                         error: no match found in search range
# | next:1432'2                                                         with "N" equal to "%n"
# | next:1432'3                                                         pattern attempts to capture variables: "N_MOD_VF"
# |            487:  %0 = and i64 %n, 63 
# | next:1432'4      ?                     possible intended match
# |            488:  %n.vec = sub i64 %n, %0 
# |            489:  br label %vector.body 
# |            490:  
# |            491: vector.body: ; preds = %vector.body, %vector.ph 
# |            492:  %index =
# | ...
# `---data was truncated (10240/10764) (change limit with -D output_limit=N)
# error: command failed with exit status: 1

--

```
</details>

If these failures are unrelated to your changes (for example tests are broken or flaky at HEAD), please open an issue at https://github.com/llvm/llvm-project/issues and add the `infrastructure` label.

https://github.com/llvm/llvm-project/pull/214760


More information about the llvm-commits mailing list