1a06be8a2SRamkumar Ramachandra; NOTE: Assertions have been autogenerated by utils/update_test_checks.py UTC_ARGS: --version 3 2a06be8a2SRamkumar Ramachandra; RUN: opt < %s -passes=slp-vectorizer -S -mtriple=riscv32 -mattr=+m,+v | FileCheck %s 3a06be8a2SRamkumar Ramachandra; RUN: opt < %s -passes=slp-vectorizer -S -mtriple=riscv64 -mattr=+m,+v | FileCheck %s 4*09058654SEric Biggers; RUN: opt < %s -passes=slp-vectorizer -S -mtriple=riscv32 -mattr=+v,+zvbb | FileCheck %s 5*09058654SEric Biggers; RUN: opt < %s -passes=slp-vectorizer -S -mtriple=riscv64 -mattr=+v,+zvbb | FileCheck %s 6a06be8a2SRamkumar Ramachandra 7a06be8a2SRamkumar Ramachandradefine <4 x float> @rint_v4f32(ptr %a) { 8a06be8a2SRamkumar Ramachandra; CHECK-LABEL: define <4 x float> @rint_v4f32( 9a06be8a2SRamkumar Ramachandra; CHECK-SAME: ptr [[A:%.*]]) #[[ATTR0:[0-9]+]] { 10a06be8a2SRamkumar Ramachandra; CHECK-NEXT: entry: 11a06be8a2SRamkumar Ramachandra; CHECK-NEXT: [[TMP0:%.*]] = load <4 x float>, ptr [[A]], align 16 12a06be8a2SRamkumar Ramachandra; CHECK-NEXT: [[TMP1:%.*]] = call <4 x float> @llvm.rint.v4f32(<4 x float> [[TMP0]]) 13a06be8a2SRamkumar Ramachandra; CHECK-NEXT: ret <4 x float> [[TMP1]] 14a06be8a2SRamkumar Ramachandra; 15a06be8a2SRamkumar Ramachandraentry: 16a06be8a2SRamkumar Ramachandra %0 = load <4 x float>, ptr %a 17a06be8a2SRamkumar Ramachandra %vecext = extractelement <4 x float> %0, i64 0 18a06be8a2SRamkumar Ramachandra %1 = call float @llvm.rint.f32(float %vecext) 19a06be8a2SRamkumar Ramachandra %vecins = insertelement <4 x float> undef, float %1, i64 0 20a06be8a2SRamkumar Ramachandra %vecext.1 = extractelement <4 x float> %0, i64 1 21a06be8a2SRamkumar Ramachandra %2 = call float @llvm.rint.f32(float %vecext.1) 22a06be8a2SRamkumar Ramachandra %vecins.1 = insertelement <4 x float> %vecins, float %2, i64 1 23a06be8a2SRamkumar Ramachandra %vecext.2 = extractelement <4 x float> %0, i64 2 24a06be8a2SRamkumar Ramachandra %3 = call float @llvm.rint.f32(float %vecext.2) 25a06be8a2SRamkumar Ramachandra %vecins.2 = insertelement <4 x float> %vecins.1, float %3, i64 2 26a06be8a2SRamkumar Ramachandra %vecext.3 = extractelement <4 x float> %0, i64 3 27a06be8a2SRamkumar Ramachandra %4 = call float @llvm.rint.f32(float %vecext.3) 28a06be8a2SRamkumar Ramachandra %vecins.3 = insertelement <4 x float> %vecins.2, float %4, i64 3 29a06be8a2SRamkumar Ramachandra ret <4 x float> %vecins.3 30a06be8a2SRamkumar Ramachandra} 31a06be8a2SRamkumar Ramachandra 32aa30018eSRamkumar Ramachandradefine <2 x i32> @lrint_v2i32f32(ptr %a) { 33aa30018eSRamkumar Ramachandra; CHECK-LABEL: define <2 x i32> @lrint_v2i32f32( 34aa30018eSRamkumar Ramachandra; CHECK-SAME: ptr [[A:%.*]]) #[[ATTR0]] { 35aa30018eSRamkumar Ramachandra; CHECK-NEXT: entry: 36aa30018eSRamkumar Ramachandra; CHECK-NEXT: [[TMP0:%.*]] = load <2 x float>, ptr [[A]], align 8 372302e4c3SRamkumar Ramachandra; CHECK-NEXT: [[TMP1:%.*]] = call <2 x i32> @llvm.lrint.v2i32.v2f32(<2 x float> [[TMP0]]) 382302e4c3SRamkumar Ramachandra; CHECK-NEXT: ret <2 x i32> [[TMP1]] 39aa30018eSRamkumar Ramachandra; 40aa30018eSRamkumar Ramachandraentry: 41aa30018eSRamkumar Ramachandra %0 = load <2 x float>, ptr %a 42aa30018eSRamkumar Ramachandra %vecext = extractelement <2 x float> %0, i32 0 43aa30018eSRamkumar Ramachandra %1 = call i32 @llvm.lrint.i32.f32(float %vecext) 44aa30018eSRamkumar Ramachandra %vecins = insertelement <2 x i32> undef, i32 %1, i32 0 45aa30018eSRamkumar Ramachandra %vecext.1 = extractelement <2 x float> %0, i32 1 46aa30018eSRamkumar Ramachandra %2 = call i32 @llvm.lrint.i32.f32(float %vecext.1) 47aa30018eSRamkumar Ramachandra %vecins.1 = insertelement <2 x i32> %vecins, i32 %2, i32 1 48aa30018eSRamkumar Ramachandra ret <2 x i32> %vecins.1 49aa30018eSRamkumar Ramachandra} 50aa30018eSRamkumar Ramachandra 51aa30018eSRamkumar Ramachandradefine <4 x i32> @lrint_v4i32f32(ptr %a) { 52aa30018eSRamkumar Ramachandra; CHECK-LABEL: define <4 x i32> @lrint_v4i32f32( 53aa30018eSRamkumar Ramachandra; CHECK-SAME: ptr [[A:%.*]]) #[[ATTR0]] { 54aa30018eSRamkumar Ramachandra; CHECK-NEXT: entry: 55aa30018eSRamkumar Ramachandra; CHECK-NEXT: [[TMP0:%.*]] = load <4 x float>, ptr [[A]], align 16 562302e4c3SRamkumar Ramachandra; CHECK-NEXT: [[TMP1:%.*]] = call <4 x i32> @llvm.lrint.v4i32.v4f32(<4 x float> [[TMP0]]) 572302e4c3SRamkumar Ramachandra; CHECK-NEXT: ret <4 x i32> [[TMP1]] 58aa30018eSRamkumar Ramachandra; 59aa30018eSRamkumar Ramachandraentry: 60aa30018eSRamkumar Ramachandra %0 = load <4 x float>, ptr %a 61aa30018eSRamkumar Ramachandra %vecext = extractelement <4 x float> %0, i32 0 62aa30018eSRamkumar Ramachandra %1 = call i32 @llvm.lrint.i32.f32(float %vecext) 63aa30018eSRamkumar Ramachandra %vecins = insertelement <4 x i32> undef, i32 %1, i32 0 64aa30018eSRamkumar Ramachandra %vecext.1 = extractelement <4 x float> %0, i32 1 65aa30018eSRamkumar Ramachandra %2 = call i32 @llvm.lrint.i32.f32(float %vecext.1) 66aa30018eSRamkumar Ramachandra %vecins.1 = insertelement <4 x i32> %vecins, i32 %2, i32 1 67aa30018eSRamkumar Ramachandra %vecext.2 = extractelement <4 x float> %0, i32 2 68aa30018eSRamkumar Ramachandra %3 = call i32 @llvm.lrint.i32.f32(float %vecext.2) 69aa30018eSRamkumar Ramachandra %vecins.2 = insertelement <4 x i32> %vecins.1, i32 %3, i32 2 70aa30018eSRamkumar Ramachandra %vecext.3 = extractelement <4 x float> %0, i32 3 71aa30018eSRamkumar Ramachandra %4 = call i32 @llvm.lrint.i32.f32(float %vecext.3) 72aa30018eSRamkumar Ramachandra %vecins.3 = insertelement <4 x i32> %vecins.2, i32 %4, i32 3 73aa30018eSRamkumar Ramachandra ret <4 x i32> %vecins.3 74aa30018eSRamkumar Ramachandra} 75aa30018eSRamkumar Ramachandra 76aa30018eSRamkumar Ramachandradefine <8 x i32> @lrint_v8i32f32(ptr %a) { 77aa30018eSRamkumar Ramachandra; CHECK-LABEL: define <8 x i32> @lrint_v8i32f32( 78aa30018eSRamkumar Ramachandra; CHECK-SAME: ptr [[A:%.*]]) #[[ATTR0]] { 79aa30018eSRamkumar Ramachandra; CHECK-NEXT: entry: 80aa30018eSRamkumar Ramachandra; CHECK-NEXT: [[TMP0:%.*]] = load <8 x float>, ptr [[A]], align 32 812302e4c3SRamkumar Ramachandra; CHECK-NEXT: [[TMP1:%.*]] = call <8 x i32> @llvm.lrint.v8i32.v8f32(<8 x float> [[TMP0]]) 822302e4c3SRamkumar Ramachandra; CHECK-NEXT: ret <8 x i32> [[TMP1]] 83aa30018eSRamkumar Ramachandra; 84aa30018eSRamkumar Ramachandraentry: 85aa30018eSRamkumar Ramachandra %0 = load <8 x float>, ptr %a 86aa30018eSRamkumar Ramachandra %vecext = extractelement <8 x float> %0, i32 0 87aa30018eSRamkumar Ramachandra %1 = call i32 @llvm.lrint.i32.f32(float %vecext) 88aa30018eSRamkumar Ramachandra %vecins = insertelement <8 x i32> undef, i32 %1, i32 0 89aa30018eSRamkumar Ramachandra %vecext.1 = extractelement <8 x float> %0, i32 1 90aa30018eSRamkumar Ramachandra %2 = call i32 @llvm.lrint.i32.f32(float %vecext.1) 91aa30018eSRamkumar Ramachandra %vecins.1 = insertelement <8 x i32> %vecins, i32 %2, i32 1 92aa30018eSRamkumar Ramachandra %vecext.2 = extractelement <8 x float> %0, i32 2 93aa30018eSRamkumar Ramachandra %3 = call i32 @llvm.lrint.i32.f32(float %vecext.2) 94aa30018eSRamkumar Ramachandra %vecins.2 = insertelement <8 x i32> %vecins.1, i32 %3, i32 2 95aa30018eSRamkumar Ramachandra %vecext.3 = extractelement <8 x float> %0, i32 3 96aa30018eSRamkumar Ramachandra %4 = call i32 @llvm.lrint.i32.f32(float %vecext.3) 97aa30018eSRamkumar Ramachandra %vecins.3 = insertelement <8 x i32> %vecins.2, i32 %4, i32 3 98aa30018eSRamkumar Ramachandra %vecext.4 = extractelement <8 x float> %0, i32 4 99aa30018eSRamkumar Ramachandra %5 = call i32 @llvm.lrint.i32.f32(float %vecext.4) 100aa30018eSRamkumar Ramachandra %vecins.4 = insertelement <8 x i32> %vecins.3, i32 %5, i32 4 101aa30018eSRamkumar Ramachandra %vecext.5 = extractelement <8 x float> %0, i32 5 102aa30018eSRamkumar Ramachandra %6 = call i32 @llvm.lrint.i32.f32(float %vecext.5) 103aa30018eSRamkumar Ramachandra %vecins.5 = insertelement <8 x i32> %vecins.4, i32 %6, i32 5 104aa30018eSRamkumar Ramachandra %vecext.6 = extractelement <8 x float> %0, i32 6 105aa30018eSRamkumar Ramachandra %7 = call i32 @llvm.lrint.i32.f32(float %vecext.6) 106aa30018eSRamkumar Ramachandra %vecins.6 = insertelement <8 x i32> %vecins.5, i32 %7, i32 6 107aa30018eSRamkumar Ramachandra %vecext.7 = extractelement <8 x float> %0, i32 7 108aa30018eSRamkumar Ramachandra %8 = call i32 @llvm.lrint.i32.f32(float %vecext.7) 109aa30018eSRamkumar Ramachandra %vecins.7 = insertelement <8 x i32> %vecins.6, i32 %8, i32 7 110aa30018eSRamkumar Ramachandra ret <8 x i32> %vecins.7 111aa30018eSRamkumar Ramachandra} 112aa30018eSRamkumar Ramachandra 113aa30018eSRamkumar Ramachandradefine <2 x i64> @lrint_v2i64f32(ptr %a) { 114aa30018eSRamkumar Ramachandra; CHECK-LABEL: define <2 x i64> @lrint_v2i64f32( 115aa30018eSRamkumar Ramachandra; CHECK-SAME: ptr [[A:%.*]]) #[[ATTR0]] { 116aa30018eSRamkumar Ramachandra; CHECK-NEXT: entry: 117aa30018eSRamkumar Ramachandra; CHECK-NEXT: [[TMP0:%.*]] = load <2 x float>, ptr [[A]], align 8 1182302e4c3SRamkumar Ramachandra; CHECK-NEXT: [[TMP1:%.*]] = call <2 x i64> @llvm.lrint.v2i64.v2f32(<2 x float> [[TMP0]]) 1192302e4c3SRamkumar Ramachandra; CHECK-NEXT: ret <2 x i64> [[TMP1]] 120aa30018eSRamkumar Ramachandra; 121aa30018eSRamkumar Ramachandraentry: 122aa30018eSRamkumar Ramachandra %0 = load <2 x float>, ptr %a 123aa30018eSRamkumar Ramachandra %vecext = extractelement <2 x float> %0, i64 0 124aa30018eSRamkumar Ramachandra %1 = call i64 @llvm.lrint.i64.f32(float %vecext) 125aa30018eSRamkumar Ramachandra %vecins = insertelement <2 x i64> undef, i64 %1, i64 0 126aa30018eSRamkumar Ramachandra %vecext.1 = extractelement <2 x float> %0, i64 1 127aa30018eSRamkumar Ramachandra %2 = call i64 @llvm.lrint.i64.f32(float %vecext.1) 128aa30018eSRamkumar Ramachandra %vecins.1 = insertelement <2 x i64> %vecins, i64 %2, i64 1 129aa30018eSRamkumar Ramachandra ret <2 x i64> %vecins.1 130aa30018eSRamkumar Ramachandra} 131aa30018eSRamkumar Ramachandra 132a06be8a2SRamkumar Ramachandradefine <4 x i64> @lrint_v4i64f32(ptr %a) { 133a06be8a2SRamkumar Ramachandra; CHECK-LABEL: define <4 x i64> @lrint_v4i64f32( 134a06be8a2SRamkumar Ramachandra; CHECK-SAME: ptr [[A:%.*]]) #[[ATTR0]] { 135a06be8a2SRamkumar Ramachandra; CHECK-NEXT: entry: 136a06be8a2SRamkumar Ramachandra; CHECK-NEXT: [[TMP0:%.*]] = load <4 x float>, ptr [[A]], align 16 1372302e4c3SRamkumar Ramachandra; CHECK-NEXT: [[TMP1:%.*]] = call <4 x i64> @llvm.lrint.v4i64.v4f32(<4 x float> [[TMP0]]) 1382302e4c3SRamkumar Ramachandra; CHECK-NEXT: ret <4 x i64> [[TMP1]] 139a06be8a2SRamkumar Ramachandra; 140a06be8a2SRamkumar Ramachandraentry: 141a06be8a2SRamkumar Ramachandra %0 = load <4 x float>, ptr %a 142a06be8a2SRamkumar Ramachandra %vecext = extractelement <4 x float> %0, i64 0 143a06be8a2SRamkumar Ramachandra %1 = call i64 @llvm.lrint.i64.f32(float %vecext) 144a06be8a2SRamkumar Ramachandra %vecins = insertelement <4 x i64> undef, i64 %1, i64 0 145a06be8a2SRamkumar Ramachandra %vecext.1 = extractelement <4 x float> %0, i64 1 146a06be8a2SRamkumar Ramachandra %2 = call i64 @llvm.lrint.i64.f32(float %vecext.1) 147a06be8a2SRamkumar Ramachandra %vecins.1 = insertelement <4 x i64> %vecins, i64 %2, i64 1 148a06be8a2SRamkumar Ramachandra %vecext.2 = extractelement <4 x float> %0, i64 2 149a06be8a2SRamkumar Ramachandra %3 = call i64 @llvm.lrint.i64.f32(float %vecext.2) 150a06be8a2SRamkumar Ramachandra %vecins.2 = insertelement <4 x i64> %vecins.1, i64 %3, i64 2 151a06be8a2SRamkumar Ramachandra %vecext.3 = extractelement <4 x float> %0, i64 3 152a06be8a2SRamkumar Ramachandra %4 = call i64 @llvm.lrint.i64.f32(float %vecext.3) 153a06be8a2SRamkumar Ramachandra %vecins.3 = insertelement <4 x i64> %vecins.2, i64 %4, i64 3 154a06be8a2SRamkumar Ramachandra ret <4 x i64> %vecins.3 155a06be8a2SRamkumar Ramachandra} 156a06be8a2SRamkumar Ramachandra 157aa30018eSRamkumar Ramachandradefine <8 x i64> @lrint_v8i64f32(ptr %a) { 158aa30018eSRamkumar Ramachandra; CHECK-LABEL: define <8 x i64> @lrint_v8i64f32( 159aa30018eSRamkumar Ramachandra; CHECK-SAME: ptr [[A:%.*]]) #[[ATTR0]] { 160aa30018eSRamkumar Ramachandra; CHECK-NEXT: entry: 161aa30018eSRamkumar Ramachandra; CHECK-NEXT: [[TMP0:%.*]] = load <8 x float>, ptr [[A]], align 32 1622302e4c3SRamkumar Ramachandra; CHECK-NEXT: [[TMP1:%.*]] = shufflevector <8 x float> [[TMP0]], <8 x float> poison, <4 x i32> <i32 0, i32 1, i32 2, i32 3> 1632302e4c3SRamkumar Ramachandra; CHECK-NEXT: [[TMP2:%.*]] = call <4 x i64> @llvm.lrint.v4i64.v4f32(<4 x float> [[TMP1]]) 1642302e4c3SRamkumar Ramachandra; CHECK-NEXT: [[TMP3:%.*]] = shufflevector <4 x i64> [[TMP2]], <4 x i64> poison, <8 x i32> <i32 0, i32 1, i32 2, i32 3, i32 poison, i32 poison, i32 poison, i32 poison> 1652302e4c3SRamkumar Ramachandra; CHECK-NEXT: [[TMP4:%.*]] = shufflevector <8 x float> [[TMP0]], <8 x float> poison, <4 x i32> <i32 4, i32 5, i32 6, i32 7> 1662302e4c3SRamkumar Ramachandra; CHECK-NEXT: [[TMP5:%.*]] = call <4 x i64> @llvm.lrint.v4i64.v4f32(<4 x float> [[TMP4]]) 1672302e4c3SRamkumar Ramachandra; CHECK-NEXT: [[TMP6:%.*]] = shufflevector <4 x i64> [[TMP5]], <4 x i64> poison, <8 x i32> <i32 0, i32 1, i32 2, i32 3, i32 poison, i32 poison, i32 poison, i32 poison> 1682302e4c3SRamkumar Ramachandra; CHECK-NEXT: [[VECINS_71:%.*]] = shufflevector <8 x i64> [[TMP3]], <8 x i64> [[TMP6]], <8 x i32> <i32 0, i32 1, i32 2, i32 3, i32 8, i32 9, i32 10, i32 11> 1692302e4c3SRamkumar Ramachandra; CHECK-NEXT: ret <8 x i64> [[VECINS_71]] 170aa30018eSRamkumar Ramachandra; 171aa30018eSRamkumar Ramachandraentry: 172aa30018eSRamkumar Ramachandra %0 = load <8 x float>, ptr %a 173aa30018eSRamkumar Ramachandra %vecext = extractelement <8 x float> %0, i64 0 174aa30018eSRamkumar Ramachandra %1 = call i64 @llvm.lrint.i64.f32(float %vecext) 175aa30018eSRamkumar Ramachandra %vecins = insertelement <8 x i64> undef, i64 %1, i64 0 176aa30018eSRamkumar Ramachandra %vecext.1 = extractelement <8 x float> %0, i64 1 177aa30018eSRamkumar Ramachandra %2 = call i64 @llvm.lrint.i64.f32(float %vecext.1) 178aa30018eSRamkumar Ramachandra %vecins.1 = insertelement <8 x i64> %vecins, i64 %2, i64 1 179aa30018eSRamkumar Ramachandra %vecext.2 = extractelement <8 x float> %0, i64 2 180aa30018eSRamkumar Ramachandra %3 = call i64 @llvm.lrint.i64.f32(float %vecext.2) 181aa30018eSRamkumar Ramachandra %vecins.2 = insertelement <8 x i64> %vecins.1, i64 %3, i64 2 182aa30018eSRamkumar Ramachandra %vecext.3 = extractelement <8 x float> %0, i64 3 183aa30018eSRamkumar Ramachandra %4 = call i64 @llvm.lrint.i64.f32(float %vecext.3) 184aa30018eSRamkumar Ramachandra %vecins.3 = insertelement <8 x i64> %vecins.2, i64 %4, i64 3 185aa30018eSRamkumar Ramachandra %vecext.4 = extractelement <8 x float> %0, i64 4 186aa30018eSRamkumar Ramachandra %5 = call i64 @llvm.lrint.i64.f32(float %vecext.4) 187aa30018eSRamkumar Ramachandra %vecins.4 = insertelement <8 x i64> %vecins.3, i64 %5, i64 4 188aa30018eSRamkumar Ramachandra %vecext.5 = extractelement <8 x float> %0, i64 5 189aa30018eSRamkumar Ramachandra %6 = call i64 @llvm.lrint.i64.f32(float %vecext.5) 190aa30018eSRamkumar Ramachandra %vecins.5 = insertelement <8 x i64> %vecins.4, i64 %6, i64 5 191aa30018eSRamkumar Ramachandra %vecext.6 = extractelement <8 x float> %0, i64 6 192aa30018eSRamkumar Ramachandra %7 = call i64 @llvm.lrint.i64.f32(float %vecext.6) 193aa30018eSRamkumar Ramachandra %vecins.6 = insertelement <8 x i64> %vecins.5, i64 %7, i64 6 194aa30018eSRamkumar Ramachandra %vecext.7 = extractelement <8 x float> %0, i64 7 195aa30018eSRamkumar Ramachandra %8 = call i64 @llvm.lrint.i64.f32(float %vecext.7) 196aa30018eSRamkumar Ramachandra %vecins.7 = insertelement <8 x i64> %vecins.6, i64 %8, i64 7 197aa30018eSRamkumar Ramachandra ret <8 x i64> %vecins.7 198aa30018eSRamkumar Ramachandra} 199aa30018eSRamkumar Ramachandra 200aa30018eSRamkumar Ramachandradefine <2 x i64> @llrint_v2i64f32(ptr %a) { 201aa30018eSRamkumar Ramachandra; CHECK-LABEL: define <2 x i64> @llrint_v2i64f32( 202aa30018eSRamkumar Ramachandra; CHECK-SAME: ptr [[A:%.*]]) #[[ATTR0]] { 203aa30018eSRamkumar Ramachandra; CHECK-NEXT: entry: 204aa30018eSRamkumar Ramachandra; CHECK-NEXT: [[TMP0:%.*]] = load <2 x float>, ptr [[A]], align 8 2052302e4c3SRamkumar Ramachandra; CHECK-NEXT: [[TMP1:%.*]] = call <2 x i64> @llvm.llrint.v2i64.v2f32(<2 x float> [[TMP0]]) 2062302e4c3SRamkumar Ramachandra; CHECK-NEXT: ret <2 x i64> [[TMP1]] 207aa30018eSRamkumar Ramachandra; 208aa30018eSRamkumar Ramachandraentry: 209aa30018eSRamkumar Ramachandra %0 = load <2 x float>, ptr %a 210aa30018eSRamkumar Ramachandra %vecext = extractelement <2 x float> %0, i64 0 211aa30018eSRamkumar Ramachandra %1 = call i64 @llvm.llrint.i64.f32(float %vecext) 212aa30018eSRamkumar Ramachandra %vecins = insertelement <2 x i64> undef, i64 %1, i64 0 213aa30018eSRamkumar Ramachandra %vecext.1 = extractelement <2 x float> %0, i64 1 214aa30018eSRamkumar Ramachandra %2 = call i64 @llvm.llrint.i64.f32(float %vecext.1) 215aa30018eSRamkumar Ramachandra %vecins.1 = insertelement <2 x i64> %vecins, i64 %2, i64 1 216aa30018eSRamkumar Ramachandra ret <2 x i64> %vecins.1 217aa30018eSRamkumar Ramachandra} 218aa30018eSRamkumar Ramachandra 219aa30018eSRamkumar Ramachandradefine <4 x i64> @llrint_v4i64f32(ptr %a) { 220aa30018eSRamkumar Ramachandra; CHECK-LABEL: define <4 x i64> @llrint_v4i64f32( 221aa30018eSRamkumar Ramachandra; CHECK-SAME: ptr [[A:%.*]]) #[[ATTR0]] { 222aa30018eSRamkumar Ramachandra; CHECK-NEXT: entry: 223aa30018eSRamkumar Ramachandra; CHECK-NEXT: [[TMP0:%.*]] = load <4 x float>, ptr [[A]], align 16 2242302e4c3SRamkumar Ramachandra; CHECK-NEXT: [[TMP1:%.*]] = call <4 x i64> @llvm.llrint.v4i64.v4f32(<4 x float> [[TMP0]]) 2252302e4c3SRamkumar Ramachandra; CHECK-NEXT: ret <4 x i64> [[TMP1]] 226aa30018eSRamkumar Ramachandra; 227aa30018eSRamkumar Ramachandraentry: 228aa30018eSRamkumar Ramachandra %0 = load <4 x float>, ptr %a 229aa30018eSRamkumar Ramachandra %vecext = extractelement <4 x float> %0, i64 0 230aa30018eSRamkumar Ramachandra %1 = call i64 @llvm.llrint.i64.f32(float %vecext) 231aa30018eSRamkumar Ramachandra %vecins = insertelement <4 x i64> undef, i64 %1, i64 0 232aa30018eSRamkumar Ramachandra %vecext.1 = extractelement <4 x float> %0, i64 1 233aa30018eSRamkumar Ramachandra %2 = call i64 @llvm.llrint.i64.f32(float %vecext.1) 234aa30018eSRamkumar Ramachandra %vecins.1 = insertelement <4 x i64> %vecins, i64 %2, i64 1 235aa30018eSRamkumar Ramachandra %vecext.2 = extractelement <4 x float> %0, i64 2 236aa30018eSRamkumar Ramachandra %3 = call i64 @llvm.llrint.i64.f32(float %vecext.2) 237aa30018eSRamkumar Ramachandra %vecins.2 = insertelement <4 x i64> %vecins.1, i64 %3, i64 2 238aa30018eSRamkumar Ramachandra %vecext.3 = extractelement <4 x float> %0, i64 3 239aa30018eSRamkumar Ramachandra %4 = call i64 @llvm.llrint.i64.f32(float %vecext.3) 240aa30018eSRamkumar Ramachandra %vecins.3 = insertelement <4 x i64> %vecins.2, i64 %4, i64 3 241aa30018eSRamkumar Ramachandra ret <4 x i64> %vecins.3 242aa30018eSRamkumar Ramachandra} 243aa30018eSRamkumar Ramachandra 244aa30018eSRamkumar Ramachandradefine <8 x i64> @llrint_v8i64f32(ptr %a) { 245aa30018eSRamkumar Ramachandra; CHECK-LABEL: define <8 x i64> @llrint_v8i64f32( 246aa30018eSRamkumar Ramachandra; CHECK-SAME: ptr [[A:%.*]]) #[[ATTR0]] { 247aa30018eSRamkumar Ramachandra; CHECK-NEXT: entry: 248aa30018eSRamkumar Ramachandra; CHECK-NEXT: [[TMP0:%.*]] = load <8 x float>, ptr [[A]], align 32 2492302e4c3SRamkumar Ramachandra; CHECK-NEXT: [[TMP1:%.*]] = shufflevector <8 x float> [[TMP0]], <8 x float> poison, <4 x i32> <i32 0, i32 1, i32 2, i32 3> 2502302e4c3SRamkumar Ramachandra; CHECK-NEXT: [[TMP2:%.*]] = call <4 x i64> @llvm.llrint.v4i64.v4f32(<4 x float> [[TMP1]]) 2512302e4c3SRamkumar Ramachandra; CHECK-NEXT: [[TMP3:%.*]] = shufflevector <4 x i64> [[TMP2]], <4 x i64> poison, <8 x i32> <i32 0, i32 1, i32 2, i32 3, i32 poison, i32 poison, i32 poison, i32 poison> 2522302e4c3SRamkumar Ramachandra; CHECK-NEXT: [[TMP4:%.*]] = shufflevector <8 x float> [[TMP0]], <8 x float> poison, <4 x i32> <i32 4, i32 5, i32 6, i32 7> 2532302e4c3SRamkumar Ramachandra; CHECK-NEXT: [[TMP5:%.*]] = call <4 x i64> @llvm.llrint.v4i64.v4f32(<4 x float> [[TMP4]]) 2542302e4c3SRamkumar Ramachandra; CHECK-NEXT: [[TMP6:%.*]] = shufflevector <4 x i64> [[TMP5]], <4 x i64> poison, <8 x i32> <i32 0, i32 1, i32 2, i32 3, i32 poison, i32 poison, i32 poison, i32 poison> 2552302e4c3SRamkumar Ramachandra; CHECK-NEXT: [[VECINS_71:%.*]] = shufflevector <8 x i64> [[TMP3]], <8 x i64> [[TMP6]], <8 x i32> <i32 0, i32 1, i32 2, i32 3, i32 8, i32 9, i32 10, i32 11> 2562302e4c3SRamkumar Ramachandra; CHECK-NEXT: ret <8 x i64> [[VECINS_71]] 257aa30018eSRamkumar Ramachandra; 258aa30018eSRamkumar Ramachandraentry: 259aa30018eSRamkumar Ramachandra %0 = load <8 x float>, ptr %a 260aa30018eSRamkumar Ramachandra %vecext = extractelement <8 x float> %0, i64 0 261aa30018eSRamkumar Ramachandra %1 = call i64 @llvm.llrint.i64.f32(float %vecext) 262aa30018eSRamkumar Ramachandra %vecins = insertelement <8 x i64> undef, i64 %1, i64 0 263aa30018eSRamkumar Ramachandra %vecext.1 = extractelement <8 x float> %0, i64 1 264aa30018eSRamkumar Ramachandra %2 = call i64 @llvm.llrint.i64.f32(float %vecext.1) 265aa30018eSRamkumar Ramachandra %vecins.1 = insertelement <8 x i64> %vecins, i64 %2, i64 1 266aa30018eSRamkumar Ramachandra %vecext.2 = extractelement <8 x float> %0, i64 2 267aa30018eSRamkumar Ramachandra %3 = call i64 @llvm.llrint.i64.f32(float %vecext.2) 268aa30018eSRamkumar Ramachandra %vecins.2 = insertelement <8 x i64> %vecins.1, i64 %3, i64 2 269aa30018eSRamkumar Ramachandra %vecext.3 = extractelement <8 x float> %0, i64 3 270aa30018eSRamkumar Ramachandra %4 = call i64 @llvm.llrint.i64.f32(float %vecext.3) 271aa30018eSRamkumar Ramachandra %vecins.3 = insertelement <8 x i64> %vecins.2, i64 %4, i64 3 272aa30018eSRamkumar Ramachandra %vecext.4 = extractelement <8 x float> %0, i64 4 273aa30018eSRamkumar Ramachandra %5 = call i64 @llvm.llrint.i64.f32(float %vecext.4) 274aa30018eSRamkumar Ramachandra %vecins.4 = insertelement <8 x i64> %vecins.3, i64 %5, i64 4 275aa30018eSRamkumar Ramachandra %vecext.5 = extractelement <8 x float> %0, i64 5 276aa30018eSRamkumar Ramachandra %6 = call i64 @llvm.llrint.i64.f32(float %vecext.5) 277aa30018eSRamkumar Ramachandra %vecins.5 = insertelement <8 x i64> %vecins.4, i64 %6, i64 5 278aa30018eSRamkumar Ramachandra %vecext.6 = extractelement <8 x float> %0, i64 6 279aa30018eSRamkumar Ramachandra %7 = call i64 @llvm.llrint.i64.f32(float %vecext.6) 280aa30018eSRamkumar Ramachandra %vecins.6 = insertelement <8 x i64> %vecins.5, i64 %7, i64 6 281aa30018eSRamkumar Ramachandra %vecext.7 = extractelement <8 x float> %0, i64 7 282aa30018eSRamkumar Ramachandra %8 = call i64 @llvm.llrint.i64.f32(float %vecext.7) 283aa30018eSRamkumar Ramachandra %vecins.7 = insertelement <8 x i64> %vecins.6, i64 %8, i64 7 284aa30018eSRamkumar Ramachandra ret <8 x i64> %vecins.7 285aa30018eSRamkumar Ramachandra} 286aa30018eSRamkumar Ramachandra 287a06be8a2SRamkumar Ramachandradeclare float @llvm.rint.f32(float) 288aa30018eSRamkumar Ramachandradeclare i32 @llvm.lrint.i32.f32(float) 289a06be8a2SRamkumar Ramachandradeclare i64 @llvm.lrint.i64.f32(float) 290aa30018eSRamkumar Ramachandradeclare i64 @llvm.llrint.i64.f32(float) 291