1f818ec9dSZarko Todorovski; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py 2f818ec9dSZarko Todorovski; RUN: llc -verify-machineinstrs -mtriple=powerpc64-ibm-aix-xcoff -vec-extabi -mcpu=pwr9 < %s | FileCheck %s -check-prefix=CHECK-64 3f818ec9dSZarko Todorovski; RUN: llc -verify-machineinstrs -mtriple=powerpc-ibm-aix-xcoff -vec-extabi -mcpu=pwr9 < %s | FileCheck %s -check-prefix=CHECK-32 4f818ec9dSZarko Todorovski 5f818ec9dSZarko Todorovskidefine zeroext i8 @test1(<16 x i8> %a, i32 signext %index) { 6f818ec9dSZarko Todorovski; CHECK-64-LABEL: test1: 7f818ec9dSZarko Todorovski; CHECK-64: # %bb.0: # %entry 8*c2e7c9cbSPeter Rong; CHECK-64-NEXT: clrldi 3, 3, 32 9f818ec9dSZarko Todorovski; CHECK-64-NEXT: vextublx 3, 3, 2 10f818ec9dSZarko Todorovski; CHECK-64-NEXT: clrldi 3, 3, 56 11f818ec9dSZarko Todorovski; CHECK-64-NEXT: blr 12f818ec9dSZarko Todorovski; 13f818ec9dSZarko Todorovski; CHECK-32-LABEL: test1: 14f818ec9dSZarko Todorovski; CHECK-32: # %bb.0: # %entry 15f818ec9dSZarko Todorovski; CHECK-32-NEXT: addi 4, 1, -16 16f818ec9dSZarko Todorovski; CHECK-32-NEXT: clrlwi 3, 3, 28 17f818ec9dSZarko Todorovski; CHECK-32-NEXT: stxv 34, -16(1) 18f818ec9dSZarko Todorovski; CHECK-32-NEXT: lbzx 3, 4, 3 19f818ec9dSZarko Todorovski; CHECK-32-NEXT: blr 20f818ec9dSZarko Todorovskientry: 21f818ec9dSZarko Todorovski %vecext = extractelement <16 x i8> %a, i32 %index 22f818ec9dSZarko Todorovski ret i8 %vecext 23f818ec9dSZarko Todorovski} 24f818ec9dSZarko Todorovski 25f818ec9dSZarko Todorovskidefine signext i8 @test2(<16 x i8> %a, i32 signext %index) { 26f818ec9dSZarko Todorovski; CHECK-64-LABEL: test2: 27f818ec9dSZarko Todorovski; CHECK-64: # %bb.0: # %entry 28*c2e7c9cbSPeter Rong; CHECK-64-NEXT: clrldi 3, 3, 32 29f818ec9dSZarko Todorovski; CHECK-64-NEXT: vextublx 3, 3, 2 30f818ec9dSZarko Todorovski; CHECK-64-NEXT: extsb 3, 3 31f818ec9dSZarko Todorovski; CHECK-64-NEXT: blr 32f818ec9dSZarko Todorovski; 33f818ec9dSZarko Todorovski; CHECK-32-LABEL: test2: 34f818ec9dSZarko Todorovski; CHECK-32: # %bb.0: # %entry 35f818ec9dSZarko Todorovski; CHECK-32-NEXT: addi 4, 1, -16 36f818ec9dSZarko Todorovski; CHECK-32-NEXT: clrlwi 3, 3, 28 37f818ec9dSZarko Todorovski; CHECK-32-NEXT: stxv 34, -16(1) 38f818ec9dSZarko Todorovski; CHECK-32-NEXT: lbzx 3, 4, 3 39f818ec9dSZarko Todorovski; CHECK-32-NEXT: extsb 3, 3 40f818ec9dSZarko Todorovski; CHECK-32-NEXT: blr 41f818ec9dSZarko Todorovskientry: 42f818ec9dSZarko Todorovski %vecext = extractelement <16 x i8> %a, i32 %index 43f818ec9dSZarko Todorovski ret i8 %vecext 44f818ec9dSZarko Todorovski} 45f818ec9dSZarko Todorovski 46f818ec9dSZarko Todorovskidefine zeroext i16 @test3(<8 x i16> %a, i32 signext %index) { 47f818ec9dSZarko Todorovski; CHECK-64-LABEL: test3: 48f818ec9dSZarko Todorovski; CHECK-64: # %bb.0: # %entry 49*c2e7c9cbSPeter Rong; CHECK-64-NEXT: clrldi 3, 3, 32 50f818ec9dSZarko Todorovski; CHECK-64-NEXT: rlwinm 3, 3, 1, 28, 30 51f818ec9dSZarko Todorovski; CHECK-64-NEXT: vextuhlx 3, 3, 2 52f818ec9dSZarko Todorovski; CHECK-64-NEXT: clrldi 3, 3, 48 53f818ec9dSZarko Todorovski; CHECK-64-NEXT: blr 54f818ec9dSZarko Todorovski; 55f818ec9dSZarko Todorovski; CHECK-32-LABEL: test3: 56f818ec9dSZarko Todorovski; CHECK-32: # %bb.0: # %entry 57f818ec9dSZarko Todorovski; CHECK-32-NEXT: addi 4, 1, -16 58f818ec9dSZarko Todorovski; CHECK-32-NEXT: rlwinm 3, 3, 1, 28, 30 59f818ec9dSZarko Todorovski; CHECK-32-NEXT: stxv 34, -16(1) 60f818ec9dSZarko Todorovski; CHECK-32-NEXT: lhzx 3, 4, 3 61f818ec9dSZarko Todorovski; CHECK-32-NEXT: blr 62f818ec9dSZarko Todorovskientry: 63f818ec9dSZarko Todorovski %vecext = extractelement <8 x i16> %a, i32 %index 64f818ec9dSZarko Todorovski ret i16 %vecext 65f818ec9dSZarko Todorovski} 66f818ec9dSZarko Todorovski 67f818ec9dSZarko Todorovskidefine signext i16 @test4(<8 x i16> %a, i32 signext %index) { 68f818ec9dSZarko Todorovski; CHECK-64-LABEL: test4: 69f818ec9dSZarko Todorovski; CHECK-64: # %bb.0: # %entry 70*c2e7c9cbSPeter Rong; CHECK-64-NEXT: clrldi 3, 3, 32 71f818ec9dSZarko Todorovski; CHECK-64-NEXT: rlwinm 3, 3, 1, 28, 30 72f818ec9dSZarko Todorovski; CHECK-64-NEXT: vextuhlx 3, 3, 2 73f818ec9dSZarko Todorovski; CHECK-64-NEXT: extsh 3, 3 74f818ec9dSZarko Todorovski; CHECK-64-NEXT: blr 75f818ec9dSZarko Todorovski; 76f818ec9dSZarko Todorovski; CHECK-32-LABEL: test4: 77f818ec9dSZarko Todorovski; CHECK-32: # %bb.0: # %entry 78f818ec9dSZarko Todorovski; CHECK-32-NEXT: addi 4, 1, -16 79f818ec9dSZarko Todorovski; CHECK-32-NEXT: rlwinm 3, 3, 1, 28, 30 80f818ec9dSZarko Todorovski; CHECK-32-NEXT: stxv 34, -16(1) 81f818ec9dSZarko Todorovski; CHECK-32-NEXT: lhax 3, 4, 3 82f818ec9dSZarko Todorovski; CHECK-32-NEXT: blr 83f818ec9dSZarko Todorovskientry: 84f818ec9dSZarko Todorovski %vecext = extractelement <8 x i16> %a, i32 %index 85f818ec9dSZarko Todorovski ret i16 %vecext 86f818ec9dSZarko Todorovski} 87f818ec9dSZarko Todorovski 88f818ec9dSZarko Todorovskidefine zeroext i32 @test5(<4 x i32> %a, i32 signext %index) { 89f818ec9dSZarko Todorovski; CHECK-64-LABEL: test5: 90f818ec9dSZarko Todorovski; CHECK-64: # %bb.0: # %entry 91*c2e7c9cbSPeter Rong; CHECK-64-NEXT: clrldi 3, 3, 32 92f818ec9dSZarko Todorovski; CHECK-64-NEXT: rlwinm 3, 3, 2, 28, 29 93f818ec9dSZarko Todorovski; CHECK-64-NEXT: vextuwlx 3, 3, 2 94f818ec9dSZarko Todorovski; CHECK-64-NEXT: blr 95f818ec9dSZarko Todorovski; 96f818ec9dSZarko Todorovski; CHECK-32-LABEL: test5: 97f818ec9dSZarko Todorovski; CHECK-32: # %bb.0: # %entry 98f818ec9dSZarko Todorovski; CHECK-32-NEXT: addi 4, 1, -16 99f818ec9dSZarko Todorovski; CHECK-32-NEXT: rlwinm 3, 3, 2, 28, 29 100f818ec9dSZarko Todorovski; CHECK-32-NEXT: stxv 34, -16(1) 101f818ec9dSZarko Todorovski; CHECK-32-NEXT: lwzx 3, 4, 3 102f818ec9dSZarko Todorovski; CHECK-32-NEXT: blr 103f818ec9dSZarko Todorovskientry: 104f818ec9dSZarko Todorovski %vecext = extractelement <4 x i32> %a, i32 %index 105f818ec9dSZarko Todorovski ret i32 %vecext 106f818ec9dSZarko Todorovski} 107f818ec9dSZarko Todorovski 108f818ec9dSZarko Todorovskidefine signext i32 @test6(<4 x i32> %a, i32 signext %index) { 109f818ec9dSZarko Todorovski; CHECK-64-LABEL: test6: 110f818ec9dSZarko Todorovski; CHECK-64: # %bb.0: # %entry 111*c2e7c9cbSPeter Rong; CHECK-64-NEXT: clrldi 3, 3, 32 112f818ec9dSZarko Todorovski; CHECK-64-NEXT: rlwinm 3, 3, 2, 28, 29 113f818ec9dSZarko Todorovski; CHECK-64-NEXT: vextuwlx 3, 3, 2 114f818ec9dSZarko Todorovski; CHECK-64-NEXT: extsw 3, 3 115f818ec9dSZarko Todorovski; CHECK-64-NEXT: blr 116f818ec9dSZarko Todorovski; 117f818ec9dSZarko Todorovski; CHECK-32-LABEL: test6: 118f818ec9dSZarko Todorovski; CHECK-32: # %bb.0: # %entry 119f818ec9dSZarko Todorovski; CHECK-32-NEXT: addi 4, 1, -16 120f818ec9dSZarko Todorovski; CHECK-32-NEXT: rlwinm 3, 3, 2, 28, 29 121f818ec9dSZarko Todorovski; CHECK-32-NEXT: stxv 34, -16(1) 122f818ec9dSZarko Todorovski; CHECK-32-NEXT: lwzx 3, 4, 3 123f818ec9dSZarko Todorovski; CHECK-32-NEXT: blr 124f818ec9dSZarko Todorovskientry: 125f818ec9dSZarko Todorovski %vecext = extractelement <4 x i32> %a, i32 %index 126f818ec9dSZarko Todorovski ret i32 %vecext 127f818ec9dSZarko Todorovski} 128f818ec9dSZarko Todorovski 129f818ec9dSZarko Todorovski; Test with immediate index 130f818ec9dSZarko Todorovskidefine zeroext i8 @test7(<16 x i8> %a) { 131f818ec9dSZarko Todorovski; CHECK-64-LABEL: test7: 132f818ec9dSZarko Todorovski; CHECK-64: # %bb.0: # %entry 133f818ec9dSZarko Todorovski; CHECK-64-NEXT: li 3, 1 134f818ec9dSZarko Todorovski; CHECK-64-NEXT: vextublx 3, 3, 2 135f818ec9dSZarko Todorovski; CHECK-64-NEXT: clrldi 3, 3, 56 136f818ec9dSZarko Todorovski; CHECK-64-NEXT: blr 137f818ec9dSZarko Todorovski; 138f818ec9dSZarko Todorovski; CHECK-32-LABEL: test7: 139f818ec9dSZarko Todorovski; CHECK-32: # %bb.0: # %entry 140f818ec9dSZarko Todorovski; CHECK-32-NEXT: stxv 34, -16(1) 141f818ec9dSZarko Todorovski; CHECK-32-NEXT: lbz 3, -15(1) 142f818ec9dSZarko Todorovski; CHECK-32-NEXT: blr 143f818ec9dSZarko Todorovskientry: 144f818ec9dSZarko Todorovski %vecext = extractelement <16 x i8> %a, i32 1 145f818ec9dSZarko Todorovski ret i8 %vecext 146f818ec9dSZarko Todorovski} 147f818ec9dSZarko Todorovski 148f818ec9dSZarko Todorovskidefine zeroext i16 @test8(<8 x i16> %a) { 149f818ec9dSZarko Todorovski; CHECK-64-LABEL: test8: 150f818ec9dSZarko Todorovski; CHECK-64: # %bb.0: # %entry 151f818ec9dSZarko Todorovski; CHECK-64-NEXT: li 3, 2 152f818ec9dSZarko Todorovski; CHECK-64-NEXT: vextuhlx 3, 3, 2 153f818ec9dSZarko Todorovski; CHECK-64-NEXT: clrldi 3, 3, 48 154f818ec9dSZarko Todorovski; CHECK-64-NEXT: blr 155f818ec9dSZarko Todorovski; 156f818ec9dSZarko Todorovski; CHECK-32-LABEL: test8: 157f818ec9dSZarko Todorovski; CHECK-32: # %bb.0: # %entry 158f818ec9dSZarko Todorovski; CHECK-32-NEXT: stxv 34, -16(1) 159f818ec9dSZarko Todorovski; CHECK-32-NEXT: lhz 3, -14(1) 160f818ec9dSZarko Todorovski; CHECK-32-NEXT: blr 161f818ec9dSZarko Todorovskientry: 162f818ec9dSZarko Todorovski %vecext = extractelement <8 x i16> %a, i32 1 163f818ec9dSZarko Todorovski ret i16 %vecext 164f818ec9dSZarko Todorovski} 165f818ec9dSZarko Todorovski 166f818ec9dSZarko Todorovskidefine zeroext i32 @test9(<4 x i32> %a) { 167f818ec9dSZarko Todorovski; CHECK-64-LABEL: test9: 168f818ec9dSZarko Todorovski; CHECK-64: # %bb.0: 169f818ec9dSZarko Todorovski; CHECK-64-NEXT: li 3, 12 170f818ec9dSZarko Todorovski; CHECK-64-NEXT: vextuwlx 3, 3, 2 171f818ec9dSZarko Todorovski; CHECK-64-NEXT: blr 172f818ec9dSZarko Todorovski; 173f818ec9dSZarko Todorovski; CHECK-32-LABEL: test9: 174f818ec9dSZarko Todorovski; CHECK-32: # %bb.0: 175f818ec9dSZarko Todorovski; CHECK-32-NEXT: stxv 34, -16(1) 176f818ec9dSZarko Todorovski; CHECK-32-NEXT: lwz 3, -4(1) 177f818ec9dSZarko Todorovski; CHECK-32-NEXT: blr 178f818ec9dSZarko Todorovski %vecext = extractelement <4 x i32> %a, i32 3 179f818ec9dSZarko Todorovski ret i32 %vecext 180f818ec9dSZarko Todorovski} 181