Need to recalculate the deps for all buildvector nodes with copyable deps to prevent a compiler crash during scheduling of instructions
89 lines
3.6 KiB
LLVM
89 lines
3.6 KiB
LLVM
; NOTE: Assertions have been autogenerated by utils/update_test_checks.py UTC_ARGS: --version 6
|
|
; RUN: opt -S --passes=slp-vectorizer < %s | FileCheck %s
|
|
|
|
define i16 @test(i40 %0) {
|
|
; CHECK-LABEL: define i16 @test(
|
|
; CHECK-SAME: i40 [[TMP0:%.*]]) {
|
|
; CHECK-NEXT: [[ENTRY:.*:]]
|
|
; CHECK-NEXT: [[DOTNOT101_I:%.*]] = icmp eq i40 0, 0
|
|
; CHECK-NEXT: [[ADD63_I:%.*]] = select i1 [[DOTNOT101_I]], i32 0, i32 0
|
|
; CHECK-NEXT: [[CONV6:%.*]] = trunc i32 [[ADD63_I]] to i16
|
|
; CHECK-NEXT: tail call void null(i16 0, i16 [[CONV6]], i16 0)
|
|
; CHECK-NEXT: [[TMP1:%.*]] = tail call i40 asm "copy $1, $0", "=a,a"(i40 0)
|
|
; CHECK-NEXT: [[TMP2:%.*]] = insertelement <8 x i40> <i40 0, i40 0, i40 0, i40 poison, i40 poison, i40 -1, i40 0, i40 0>, i40 [[TMP0]], i32 3
|
|
; CHECK-NEXT: [[TMP3:%.*]] = insertelement <8 x i40> [[TMP2]], i40 [[TMP1]], i32 4
|
|
; CHECK-NEXT: [[TMP4:%.*]] = add <8 x i40> [[TMP3]], zeroinitializer
|
|
; CHECK-NEXT: [[TMP5:%.*]] = or <8 x i40> [[TMP4]], zeroinitializer
|
|
; CHECK-NEXT: [[TMP6:%.*]] = insertelement <8 x i40> <i40 0, i40 0, i40 0, i40 0, i40 0, i40 0, i40 poison, i40 0>, i40 [[TMP1]], i32 6
|
|
; CHECK-NEXT: [[TMP7:%.*]] = or <8 x i40> zeroinitializer, [[TMP6]]
|
|
; CHECK-NEXT: [[TMP8:%.*]] = or <8 x i40> [[TMP5]], [[TMP7]]
|
|
; CHECK-NEXT: [[TMP9:%.*]] = or <8 x i40> [[TMP8]], zeroinitializer
|
|
; CHECK-NEXT: [[TMP10:%.*]] = and <8 x i40> [[TMP9]], <i40 0, i40 0, i40 0, i40 -1, i40 0, i40 0, i40 0, i40 0>
|
|
; CHECK-NEXT: [[TMP11:%.*]] = icmp ne <8 x i40> [[TMP10]], zeroinitializer
|
|
; CHECK-NEXT: [[TMP12:%.*]] = bitcast <8 x i1> [[TMP11]] to i8
|
|
; CHECK-NEXT: [[TMP13:%.*]] = call i8 @llvm.ctpop.i8(i8 [[TMP12]])
|
|
; CHECK-NEXT: [[TMP14:%.*]] = zext i8 [[TMP13]] to i16
|
|
; CHECK-NEXT: ret i16 [[TMP14]]
|
|
;
|
|
entry:
|
|
%1 = add i40 0, 0
|
|
%.not101.i = icmp eq i40 %1, 0
|
|
%add63.i = select i1 %.not101.i, i32 0, i32 0
|
|
%conv6 = trunc i32 %add63.i to i16
|
|
tail call void null(i16 0, i16 %conv6, i16 0)
|
|
%2 = add i40 0, 0
|
|
%3 = or i40 %2, 0
|
|
%4 = or i40 %3, 0
|
|
%5 = or i40 %4, 0
|
|
%unsclear9.i68 = and i40 %5, 0
|
|
%6 = tail call i40 asm "copy $1, $0", "=a,a"(i40 0)
|
|
%7 = or i40 0, %6
|
|
%8 = or i40 0, %7
|
|
%9 = or i40 %8, 0
|
|
%unsclear47.i = and i40 %9, 0
|
|
%10 = add i40 0, 0
|
|
%11 = or i40 %10, %1
|
|
%12 = or i40 %11, %7
|
|
%13 = or i40 %12, 0
|
|
%unsclear89.i79 = and i40 %13, 0
|
|
%14 = add i40 0, 0
|
|
%15 = or i40 %14, 0
|
|
%16 = or i40 %15, 0
|
|
%17 = or i40 %16, 0
|
|
%unsclear110.i = and i40 %17, 0
|
|
%18 = or i40 %14, 0
|
|
%19 = or i40 %18, 0
|
|
%20 = or i40 %19, 0
|
|
%unsclear131.i82 = and i40 %20, 0
|
|
%21 = add i40 0, 0
|
|
%22 = or i40 0, %21
|
|
%23 = or i40 %22, 0
|
|
%24 = or i40 %23, 0
|
|
%unsclear152.i = and i40 %24, 0
|
|
%.not47.i = icmp ne i40 %unsclear152.i, 0
|
|
%add156.i = zext i1 %.not47.i to i16
|
|
%.not46.i = icmp ne i40 %unsclear131.i82, 0
|
|
%add135.i83 = zext i1 %.not46.i to i16
|
|
%add31.i75 = add i16 %add156.i, %add135.i83
|
|
%.not.i69 = icmp ne i40 %unsclear9.i68, 0
|
|
%add10.i71 = zext i1 %.not.i69 to i16
|
|
%add52.i = add i16 %add31.i75, %add10.i71
|
|
%.not41.i73 = icmp ne i40 %0, 0
|
|
%add30.i74 = zext i1 %.not41.i73 to i16
|
|
%add73.i78 = add i16 %add52.i, %add30.i74
|
|
%.not42.i76 = icmp ne i40 %unsclear47.i, 0
|
|
%add51.i = zext i1 %.not42.i76 to i16
|
|
%add94.i81 = add i16 %add73.i78, %add51.i
|
|
%.not43.i77 = icmp ne i40 0, 0
|
|
%add72.i = zext i1 %.not43.i77 to i16
|
|
%add115.i = add i16 %add94.i81, %add72.i
|
|
%.not44.i = icmp ne i40 %unsclear89.i79, 0
|
|
%add93.i80 = zext i1 %.not44.i to i16
|
|
%add136.i84 = add i16 %add115.i, %add93.i80
|
|
%.not45.i = icmp ne i40 %unsclear110.i, 0
|
|
%add114.i = zext i1 %.not45.i to i16
|
|
%add157.i = add i16 %add136.i84, %add114.i
|
|
ret i16 %add157.i
|
|
}
|
|
|