brintos

brintos / llvm-project-archived public Read only

0
0
Text · 3.3 KiB · 9c615bb Raw
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