brintos

brintos / llvm-project-archived public Read only

0
0
Text · 3.4 KiB · da2c330 Raw
106 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py2; Check the vctlz* instructions that were added in P83; RUN: llc -verify-machineinstrs -mtriple=powerpc64-unknown-linux-gnu -mcpu=pwr8 < %s | FileCheck %s4; RUN: llc -verify-machineinstrs -mtriple=powerpc64-ibm-aix-xcoff -vec-extabi -mcpu=pwr8 < %s | FileCheck %s5; RUN: llc -verify-machineinstrs -mtriple=powerpc64-unknown-linux-gnu -mcpu=pwr8 -mattr=-vsx < %s | FileCheck %s --check-prefix=CHECK-NOVSX6; RUN: llc -verify-machineinstrs -mtriple=powerpc64-ibm-aix-xcoff -vec-extabi -mcpu=pwr8 -mattr=-vsx < %s | FileCheck %s --check-prefix=CHECK-NOVSX7 8declare <16 x i8> @llvm.ctlz.v16i8(<16 x i8>) nounwind readnone9declare <8 x i16> @llvm.ctlz.v8i16(<8 x i16>) nounwind readnone10declare <4 x i32> @llvm.ctlz.v4i32(<4 x i32>) nounwind readnone11declare <2 x i64> @llvm.ctlz.v2i64(<2 x i64>) nounwind readnone12 13define <16 x i8> @test_v16i8(<16 x i8> %x) nounwind readnone {14; CHECK-LABEL: test_v16i8:15; CHECK:       # %bb.0:16; CHECK-NEXT:    vclzb 2, 217; CHECK-NEXT:    blr18;19; CHECK-NOVSX-LABEL: test_v16i8:20; CHECK-NOVSX:       # %bb.0:21; CHECK-NOVSX-NEXT:    vclzb 2, 222; CHECK-NOVSX-NEXT:    blr23       %vcnt = tail call <16 x i8> @llvm.ctlz.v16i8(<16 x i8> %x)24       ret <16 x i8> %vcnt25}26 27define <8 x i16> @test_v8i16(<8 x i16> %x) nounwind readnone {28; CHECK-LABEL: test_v8i16:29; CHECK:       # %bb.0:30; CHECK-NEXT:    vclzh 2, 231; CHECK-NEXT:    blr32;33; CHECK-NOVSX-LABEL: test_v8i16:34; CHECK-NOVSX:       # %bb.0:35; CHECK-NOVSX-NEXT:    vclzh 2, 236; CHECK-NOVSX-NEXT:    blr37       %vcnt = tail call <8 x i16> @llvm.ctlz.v8i16(<8 x i16> %x)38       ret <8 x i16> %vcnt39}40 41define <4 x i32> @test_v4i32(<4 x i32> %x) nounwind readnone {42; CHECK-LABEL: test_v4i32:43; CHECK:       # %bb.0:44; CHECK-NEXT:    vclzw 2, 245; CHECK-NEXT:    blr46;47; CHECK-NOVSX-LABEL: test_v4i32:48; CHECK-NOVSX:       # %bb.0:49; CHECK-NOVSX-NEXT:    vclzw 2, 250; CHECK-NOVSX-NEXT:    blr51       %vcnt = tail call <4 x i32> @llvm.ctlz.v4i32(<4 x i32> %x)52       ret <4 x i32> %vcnt53}54 55define <2 x i64> @test_v2i64(<2 x i64> %x) nounwind readnone {56; CHECK-LABEL: test_v2i64:57; CHECK:       # %bb.0:58; CHECK-NEXT:    vclzd 2, 259; CHECK-NEXT:    blr60;61; CHECK-NOVSX-LABEL: test_v2i64:62; CHECK-NOVSX:       # %bb.0:63; CHECK-NOVSX-NEXT:    vclzd 2, 264; CHECK-NOVSX-NEXT:    blr65       %vcnt = tail call <2 x i64> @llvm.ctlz.v2i64(<2 x i64> %x)66       ret <2 x i64> %vcnt67}68 69declare <2 x i32> @llvm.ctlz.v2i32(<2 x i32>, i1 immarg)70 71define <2 x i32> @illegal_ctlz(<2 x i32> %v1) {72; CHECK-LABEL: illegal_ctlz:73; CHECK:       # %bb.0:74; CHECK-NEXT:    vclzw 2, 275; CHECK-NEXT:    blr76;77; CHECK-NOVSX-LABEL: illegal_ctlz:78; CHECK-NOVSX:       # %bb.0:79; CHECK-NOVSX-NEXT:    vclzw 2, 280; CHECK-NOVSX-NEXT:    blr81  %v2 = call <2 x i32> @llvm.ctlz.v2i32(<2 x i32> %v1, i1 true)82  ret <2 x i32> %v283}84 85declare <2 x i32> @llvm.cttz.v2i32(<2 x i32>, i1 immarg)86 87define <2 x i32> @illegal_cttz(<2 x i32> %v1) {88; CHECK-LABEL: illegal_cttz:89; CHECK:       # %bb.0:90; CHECK-NEXT:    vspltisw 3, 191; CHECK-NEXT:    vsubuwm 3, 2, 392; CHECK-NEXT:    xxlandc 34, 35, 3493; CHECK-NEXT:    vpopcntw 2, 294; CHECK-NEXT:    blr95;96; CHECK-NOVSX-LABEL: illegal_cttz:97; CHECK-NOVSX:       # %bb.0:98; CHECK-NOVSX-NEXT:    vspltisw 3, 199; CHECK-NOVSX-NEXT:    vsubuwm 3, 2, 3100; CHECK-NOVSX-NEXT:    vandc 2, 3, 2101; CHECK-NOVSX-NEXT:    vpopcntw 2, 2102; CHECK-NOVSX-NEXT:    blr103  %v2 = call <2 x i32> @llvm.cttz.v2i32(<2 x i32> %v1, i1 true)104  ret <2 x i32> %v2105}106