1; NOTE: Assertions have been autogenerated by utils/update_test_checks.py 2; RUN: opt -S -passes=slp-vectorizer -mtriple=x86_64-unknown-linux -mattr="+avx512f,+avx512bw" -slp-threshold=-100 -slp-min-tree-size=0 < %s | FileCheck %s 3 4define i32 @foo(i32 %a) { 5; CHECK-LABEL: @foo( 6; CHECK-NEXT: entry: 7; CHECK-NEXT: [[TMP0:%.*]] = sub nsw i32 0, [[A:%.*]] 8; CHECK-NEXT: [[LOCAL:%.*]] = sub nsw i32 0, 0 9; CHECK-NEXT: br i1 false, label [[BB5:%.*]], label [[BB1:%.*]] 10; CHECK: bb1: 11; CHECK-NEXT: [[TMP1:%.*]] = mul i32 [[LOCAL]], 3 12; CHECK-NEXT: [[OP_RDX2:%.*]] = add i32 [[TMP1]], [[TMP0]] 13; CHECK-NEXT: [[OP_RDX3:%.*]] = add i32 [[OP_RDX2]], 0 14; CHECK-NEXT: br label [[BB3:%.*]] 15; CHECK: bb2: 16; CHECK-NEXT: br label [[BB3]] 17; CHECK: bb3: 18; CHECK-NEXT: [[P1:%.*]] = phi i32 [ [[OP_RDX3]], [[BB1]] ], [ 0, [[BB2:%.*]] ] 19; CHECK-NEXT: ret i32 0 20; CHECK: bb4: 21; CHECK-NEXT: [[TMP2:%.*]] = mul i32 [[LOCAL]], 8 22; CHECK-NEXT: [[OP_RDX:%.*]] = add i32 [[TMP2]], [[TMP0]] 23; CHECK-NEXT: [[OP_RDX1:%.*]] = add i32 [[OP_RDX]], 0 24; CHECK-NEXT: ret i32 [[OP_RDX1]] 25; CHECK: bb5: 26; CHECK-NEXT: br label [[BB4:%.*]] 27; 28entry: 29 %0 = sub nsw i32 0, %a 30 %local = sub nsw i32 0, 0 31 br i1 false, label %bb5, label %bb1 32 33bb1: 34 %1 = add i32 %0, %local 35 %2 = add i32 %1, 0 36 %3 = add i32 %2, %local 37 %4 = add i32 %3, 0 38 %5 = add i32 %4, %local 39 br label %bb3 40 41bb2: 42 br label %bb3 43 44bb3: 45 %p1 = phi i32 [ %5, %bb1 ], [ 0, %bb2 ] 46 ret i32 0 47 48bb4: 49 %6 = add i32 %0, %local 50 %7 = add i32 %6, %local 51 %8 = add i32 %7, 0 52 %9 = add i32 %8, %local 53 %10 = add i32 %9, 0 54 %11 = add i32 %10, %local 55 %12 = add i32 %11, 0 56 %13 = add i32 %12, %local 57 %14 = add i32 %13, 0 58 %15 = add i32 %14, %local 59 %16 = add i32 %15, 0 60 %17 = add i32 %16, %local 61 %18 = add i32 %17, 0 62 %19 = add i32 %18, %local 63 ret i32 %19 64 65bb5: 66 br label %bb4 67} 68