1b955c7e6SSimon Moll; RUN: llc < %s -mtriple=ve -mattr=+vpu | FileCheck %s 2b955c7e6SSimon Moll 3b955c7e6SSimon Moll; <256 x i32> 4b955c7e6SSimon Moll 5b955c7e6SSimon Moll; Function Attrs: nounwind 6b955c7e6SSimon Molldefine fastcc <256 x i32> @add_vv_v256i32(<256 x i32> %x, <256 x i32> %y) { 7b955c7e6SSimon Moll; CHECK-LABEL: add_vv_v256i32: 8b955c7e6SSimon Moll; CHECK: # %bb.0: 9b955c7e6SSimon Moll; CHECK-NEXT: lea %s0, 256 10b955c7e6SSimon Moll; CHECK-NEXT: lvl %s0 11b955c7e6SSimon Moll; CHECK-NEXT: vadds.w.sx %v0, %v0, %v1 12b955c7e6SSimon Moll; CHECK-NEXT: b.l.t (, %s10) 13b955c7e6SSimon Moll %z = add <256 x i32> %x, %y 14b955c7e6SSimon Moll ret <256 x i32> %z 15b955c7e6SSimon Moll} 16b955c7e6SSimon Moll 17b955c7e6SSimon Moll; Function Attrs: nounwind 18b955c7e6SSimon Molldefine fastcc <256 x i32> @add_sv_v256i32(i32 %x, <256 x i32> %y) { 19b955c7e6SSimon Moll; CHECK-LABEL: add_sv_v256i32: 20b955c7e6SSimon Moll; CHECK: # %bb.0: 21*44a679eaSKazushi (Jam) Marukawa; CHECK-NEXT: and %s0, %s0, (32)0 22b955c7e6SSimon Moll; CHECK-NEXT: lea %s1, 256 23b955c7e6SSimon Moll; CHECK-NEXT: lvl %s1 24b955c7e6SSimon Moll; CHECK-NEXT: vadds.w.sx %v0, %s0, %v0 25b955c7e6SSimon Moll; CHECK-NEXT: b.l.t (, %s10) 26b955c7e6SSimon Moll %xins = insertelement <256 x i32> undef, i32 %x, i32 0 27b955c7e6SSimon Moll %vx = shufflevector <256 x i32> %xins, <256 x i32> undef, <256 x i32> zeroinitializer 28b955c7e6SSimon Moll %z = add <256 x i32> %vx, %y 29b955c7e6SSimon Moll ret <256 x i32> %z 30b955c7e6SSimon Moll} 31b955c7e6SSimon Moll 32b955c7e6SSimon Moll; Function Attrs: nounwind 33b955c7e6SSimon Molldefine fastcc <256 x i32> @add_vs_v256i32(<256 x i32> %x, i32 %y) { 34b955c7e6SSimon Moll; CHECK-LABEL: add_vs_v256i32: 35b955c7e6SSimon Moll; CHECK: # %bb.0: 36*44a679eaSKazushi (Jam) Marukawa; CHECK-NEXT: and %s0, %s0, (32)0 37b955c7e6SSimon Moll; CHECK-NEXT: lea %s1, 256 38b955c7e6SSimon Moll; CHECK-NEXT: lvl %s1 39b955c7e6SSimon Moll; CHECK-NEXT: vadds.w.sx %v0, %s0, %v0 40b955c7e6SSimon Moll; CHECK-NEXT: b.l.t (, %s10) 41b955c7e6SSimon Moll %yins = insertelement <256 x i32> undef, i32 %y, i32 0 42b955c7e6SSimon Moll %vy = shufflevector <256 x i32> %yins, <256 x i32> undef, <256 x i32> zeroinitializer 43b955c7e6SSimon Moll %z = add <256 x i32> %x, %vy 44b955c7e6SSimon Moll ret <256 x i32> %z 45b955c7e6SSimon Moll} 46b955c7e6SSimon Moll 47b955c7e6SSimon Moll 48b955c7e6SSimon Moll 49b955c7e6SSimon Moll; <256 x i64> 50b955c7e6SSimon Moll 51b955c7e6SSimon Moll; Function Attrs: nounwind 52b955c7e6SSimon Molldefine fastcc <256 x i64> @add_vv_v256i64(<256 x i64> %x, <256 x i64> %y) { 53b955c7e6SSimon Moll; CHECK-LABEL: add_vv_v256i64: 54b955c7e6SSimon Moll; CHECK: # %bb.0: 55b955c7e6SSimon Moll; CHECK-NEXT: lea %s0, 256 56b955c7e6SSimon Moll; CHECK-NEXT: lvl %s0 57b955c7e6SSimon Moll; CHECK-NEXT: vadds.l %v0, %v0, %v1 58b955c7e6SSimon Moll; CHECK-NEXT: b.l.t (, %s10) 59b955c7e6SSimon Moll %z = add <256 x i64> %x, %y 60b955c7e6SSimon Moll ret <256 x i64> %z 61b955c7e6SSimon Moll} 62b955c7e6SSimon Moll 63b955c7e6SSimon Moll; Function Attrs: nounwind 64b955c7e6SSimon Molldefine fastcc <256 x i64> @add_sv_v256i64(i64 %x, <256 x i64> %y) { 65b955c7e6SSimon Moll; CHECK-LABEL: add_sv_v256i64: 66b955c7e6SSimon Moll; CHECK: # %bb.0: 67b955c7e6SSimon Moll; CHECK-NEXT: lea %s1, 256 68b955c7e6SSimon Moll; CHECK-NEXT: lvl %s1 69b955c7e6SSimon Moll; CHECK-NEXT: vadds.l %v0, %s0, %v0 70b955c7e6SSimon Moll; CHECK-NEXT: b.l.t (, %s10) 71b955c7e6SSimon Moll %xins = insertelement <256 x i64> undef, i64 %x, i32 0 72b955c7e6SSimon Moll %vx = shufflevector <256 x i64> %xins, <256 x i64> undef, <256 x i32> zeroinitializer 73b955c7e6SSimon Moll %z = add <256 x i64> %vx, %y 74b955c7e6SSimon Moll ret <256 x i64> %z 75b955c7e6SSimon Moll} 76b955c7e6SSimon Moll 77b955c7e6SSimon Moll; Function Attrs: nounwind 78b955c7e6SSimon Molldefine fastcc <256 x i64> @add_vs_v256i64(<256 x i64> %x, i64 %y) { 79b955c7e6SSimon Moll; CHECK-LABEL: add_vs_v256i64: 80b955c7e6SSimon Moll; CHECK: # %bb.0: 81b955c7e6SSimon Moll; CHECK-NEXT: lea %s1, 256 82b955c7e6SSimon Moll; CHECK-NEXT: lvl %s1 83b955c7e6SSimon Moll; CHECK-NEXT: vadds.l %v0, %s0, %v0 84b955c7e6SSimon Moll; CHECK-NEXT: b.l.t (, %s10) 85b955c7e6SSimon Moll %yins = insertelement <256 x i64> undef, i64 %y, i32 0 86b955c7e6SSimon Moll %vy = shufflevector <256 x i64> %yins, <256 x i64> undef, <256 x i32> zeroinitializer 87b955c7e6SSimon Moll %z = add <256 x i64> %x, %vy 88b955c7e6SSimon Moll ret <256 x i64> %z 89b955c7e6SSimon Moll} 90b955c7e6SSimon Moll 91b955c7e6SSimon Moll; <128 x i64> 92b955c7e6SSimon Moll; We expect this to be widened. 93b955c7e6SSimon Moll 94b955c7e6SSimon Moll; Function Attrs: nounwind 95b955c7e6SSimon Molldefine fastcc <128 x i64> @add_vv_v128i64(<128 x i64> %x, <128 x i64> %y) { 96b955c7e6SSimon Moll; CHECK-LABEL: add_vv_v128i64: 97b955c7e6SSimon Moll; CHECK: # %bb.0: 98b955c7e6SSimon Moll; CHECK-NEXT: lea %s0, 256 99b955c7e6SSimon Moll; CHECK-NEXT: lvl %s0 100b955c7e6SSimon Moll; CHECK-NEXT: vadds.l %v0, %v0, %v1 101b955c7e6SSimon Moll; CHECK-NEXT: b.l.t (, %s10) 102b955c7e6SSimon Moll %z = add <128 x i64> %x, %y 103b955c7e6SSimon Moll ret <128 x i64> %z 104b955c7e6SSimon Moll} 105b955c7e6SSimon Moll 106b955c7e6SSimon Moll; <256 x i16> 107b955c7e6SSimon Moll; We expect promotion. 108b955c7e6SSimon Moll 109b955c7e6SSimon Moll; Function Attrs: nounwind 110b955c7e6SSimon Molldefine fastcc <256 x i16> @add_vv_v256i16(<256 x i16> %x, <256 x i16> %y) { 111b955c7e6SSimon Moll; CHECK-LABEL: add_vv_v256i16: 112b955c7e6SSimon Moll; CHECK: # %bb.0: 113b955c7e6SSimon Moll; CHECK-NEXT: lea %s0, 256 114b955c7e6SSimon Moll; CHECK-NEXT: lvl %s0 115b955c7e6SSimon Moll; CHECK-NEXT: vadds.w.sx %v0, %v0, %v1 116b955c7e6SSimon Moll; CHECK-NEXT: b.l.t (, %s10) 117b955c7e6SSimon Moll %z = add <256 x i16> %x, %y 118b955c7e6SSimon Moll ret <256 x i16> %z 119b955c7e6SSimon Moll} 120b955c7e6SSimon Moll 121b955c7e6SSimon Moll; <128 x i16> 122b955c7e6SSimon Moll; We expect this to be scalarized (for now). 123b955c7e6SSimon Moll 124b955c7e6SSimon Moll; Function Attrs: nounwind 125b955c7e6SSimon Molldefine fastcc <128 x i16> @add_vv_v128i16(<128 x i16> %x, <128 x i16> %y) { 126b955c7e6SSimon Moll; CHECK-LABEL: add_vv_v128i16: 127b955c7e6SSimon Moll; CHECK-NOT: vadd 128b955c7e6SSimon Moll %z = add <128 x i16> %x, %y 129b955c7e6SSimon Moll ret <128 x i16> %z 130b955c7e6SSimon Moll} 131b955c7e6SSimon Moll 132