62 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_test_checks.py2; RUN: opt -passes=slp-vectorizer -S %s | FileCheck %s3 4target datalayout = "e-m:e-p270:32:32-p271:32:32-p272:64:64-i8:8:32-i16:16:32-i64:64-i128:128-n32:64-S128-Fn32"5target triple = "aarch64-unknown-linux-gnu"6 7define void @foo(ptr %0) {8; CHECK-LABEL: @foo(9; CHECK-NEXT: vector.scevcheck:10; CHECK-NEXT: [[TMP1:%.*]] = insertelement <2 x ptr> <ptr poison, ptr null>, ptr [[TMP0:%.*]], i32 011; CHECK-NEXT: [[TMP2:%.*]] = getelementptr i8, <2 x ptr> [[TMP1]], <2 x i64> splat (i64 4)12; CHECK-NEXT: [[TMP3:%.*]] = shufflevector <2 x ptr> [[TMP2]], <2 x ptr> poison, <4 x i32> <i32 0, i32 0, i32 0, i32 1>13; CHECK-NEXT: [[TMP6:%.*]] = insertelement <4 x ptr> poison, ptr [[TMP0]], i32 014; CHECK-NEXT: [[TMP5:%.*]] = shufflevector <4 x ptr> [[TMP6]], <4 x ptr> poison, <4 x i32> zeroinitializer15; CHECK-NEXT: [[TMP7:%.*]] = shufflevector <4 x ptr> [[TMP3]], <4 x ptr> poison, <8 x i32> <i32 0, i32 1, i32 2, i32 3, i32 poison, i32 poison, i32 poison, i32 poison>16; CHECK-NEXT: [[TMP11:%.*]] = shufflevector <4 x ptr> [[TMP5]], <4 x ptr> poison, <8 x i32> <i32 0, i32 1, i32 2, i32 3, i32 poison, i32 poison, i32 poison, i32 poison>17; CHECK-NEXT: [[TMP12:%.*]] = shufflevector <4 x ptr> [[TMP3]], <4 x ptr> [[TMP5]], <8 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7>18; CHECK-NEXT: [[TMP8:%.*]] = shufflevector <8 x ptr> [[TMP12]], <8 x ptr> poison, <8 x i32> <i32 0, i32 1, i32 2, i32 4, i32 5, i32 6, i32 7, i32 3>19; CHECK-NEXT: [[TMP9:%.*]] = icmp ult <8 x ptr> [[TMP8]], zeroinitializer20; CHECK-NEXT: [[TMP10:%.*]] = and <8 x i1> [[TMP9]], zeroinitializer21; CHECK-NEXT: [[OP_RDX:%.*]] = call i1 @llvm.vector.reduce.or.v8i1(<8 x i1> [[TMP10]])22; CHECK-NEXT: br i1 [[OP_RDX]], label [[DOTLR_PH:%.*]], label [[VECTOR_PH:%.*]]23; CHECK: vector.ph:24; CHECK-NEXT: ret void25; CHECK: .lr.ph:26; CHECK-NEXT: ret void27;28vector.scevcheck:29 %scevgep = getelementptr i8, ptr %0, i64 430 %scevgep3 = getelementptr i8, ptr null, i64 431 %bound011 = icmp ult ptr %scevgep, null32 %found.conflict13 = and i1 %bound011, false33 %bound014 = icmp ult ptr %scevgep, null34 %found.conflict16 = and i1 %bound014, false35 %conflict.rdx17 = or i1 %found.conflict13, %found.conflict1636 %bound018 = icmp ult ptr %scevgep, null37 %found.conflict20 = and i1 %bound018, false38 %conflict.rdx21 = or i1 %conflict.rdx17, %found.conflict2039 %bound022 = icmp ult ptr %0, null40 %found.conflict24 = and i1 %bound022, false41 %conflict.rdx25 = or i1 %conflict.rdx21, %found.conflict2442 %bound026 = icmp ult ptr %0, null43 %found.conflict28 = and i1 %bound026, false44 %conflict.rdx29 = or i1 %conflict.rdx25, %found.conflict2845 %bound030 = icmp ult ptr %0, null46 %found.conflict32 = and i1 %bound030, false47 %conflict.rdx33 = or i1 %conflict.rdx29, %found.conflict3248 %bound034 = icmp ult ptr %0, null49 %found.conflict36 = and i1 %bound034, false50 %conflict.rdx37 = or i1 %conflict.rdx33, %found.conflict3651 %bound038 = icmp ult ptr %scevgep3, null52 %found.conflict40 = and i1 %bound038, false53 %conflict.rdx41 = or i1 %conflict.rdx37, %found.conflict4054 br i1 %conflict.rdx41, label %.lr.ph, label %vector.ph55 56vector.ph: ; preds = %vector.scevcheck57 ret void58 59.lr.ph: ; preds = %vector.scevcheck60 ret void61}62