// NOTE: Assertions have been autogenerated by utils/update_cc_test_checks.py // REQUIRES: powerpc-registered-target // RUN: %clang_cc1 -flax-vector-conversions=none -triple powerpc-unknown-unknown \ // RUN: -target-cpu future -emit-llvm %s -o - | FileCheck %s // RUN: %clang_cc1 -flax-vector-conversions=none -triple powerpc64le-unknown-unknown \ // RUN: -target-cpu future -emit-llvm %s -o - | FileCheck %s // AI Generated. vector unsigned char vuca, vucb, vucc; // CHECK-LABEL: @test_xxmulmul( // CHECK-NEXT: entry: // CHECK-NEXT: [[TMP0:%.*]] = load <16 x i8>, ptr @vuca, align 16 // CHECK-NEXT: [[TMP1:%.*]] = load <16 x i8>, ptr @vucb, align 16 // CHECK-NEXT: [[TMP2:%.*]] = call <16 x i8> @llvm.ppc.xxmulmul(<16 x i8> [[TMP0]], <16 x i8> [[TMP1]], i32 3) // CHECK-NEXT: ret <16 x i8> [[TMP2]] // vector unsigned char test_xxmulmul() { return __builtin_xxmulmul(vuca, vucb, 3); } // CHECK-LABEL: @test_xxmulmulhiadd( // CHECK-NEXT: entry: // CHECK-NEXT: [[TMP0:%.*]] = load <16 x i8>, ptr @vuca, align 16 // CHECK-NEXT: [[TMP1:%.*]] = load <16 x i8>, ptr @vucb, align 16 // CHECK-NEXT: [[TMP2:%.*]] = call <16 x i8> @llvm.ppc.xxmulmulhiadd(<16 x i8> [[TMP0]], <16 x i8> [[TMP1]], i32 0, i32 1, i32 0) // CHECK-NEXT: ret <16 x i8> [[TMP2]] // vector unsigned char test_xxmulmulhiadd() { return __builtin_xxmulmulhiadd(vuca, vucb, 0, 1, 0); } // CHECK-LABEL: @test_xxmulmulloadd( // CHECK-NEXT: entry: // CHECK-NEXT: [[TMP0:%.*]] = load <16 x i8>, ptr @vuca, align 16 // CHECK-NEXT: [[TMP1:%.*]] = load <16 x i8>, ptr @vucb, align 16 // CHECK-NEXT: [[TMP2:%.*]] = call <16 x i8> @llvm.ppc.xxmulmulloadd(<16 x i8> [[TMP0]], <16 x i8> [[TMP1]], i32 1, i32 0) // CHECK-NEXT: ret <16 x i8> [[TMP2]] // vector unsigned char test_xxmulmulloadd() { return __builtin_xxmulmulloadd(vuca, vucb, 1, 0); } // CHECK-LABEL: @test_xxssumudm( // CHECK-NEXT: entry: // CHECK-NEXT: [[TMP0:%.*]] = load <16 x i8>, ptr @vuca, align 16 // CHECK-NEXT: [[TMP1:%.*]] = load <16 x i8>, ptr @vucb, align 16 // CHECK-NEXT: [[TMP2:%.*]] = call <16 x i8> @llvm.ppc.xxssumudm(<16 x i8> [[TMP0]], <16 x i8> [[TMP1]], i32 1) // CHECK-NEXT: ret <16 x i8> [[TMP2]] // vector unsigned char test_xxssumudm() { return __builtin_xxssumudm(vuca, vucb, 1); } // CHECK-LABEL: @test_xxssumudmc( // CHECK-NEXT: entry: // CHECK-NEXT: [[TMP0:%.*]] = load <16 x i8>, ptr @vuca, align 16 // CHECK-NEXT: [[TMP1:%.*]] = load <16 x i8>, ptr @vucb, align 16 // CHECK-NEXT: [[TMP2:%.*]] = call <16 x i8> @llvm.ppc.xxssumudmc(<16 x i8> [[TMP0]], <16 x i8> [[TMP1]], i32 0) // CHECK-NEXT: ret <16 x i8> [[TMP2]] // vector unsigned char test_xxssumudmc() { return __builtin_xxssumudmc(vuca, vucb, 0); } // CHECK-LABEL: @test_xxssumudmcext( // CHECK-NEXT: entry: // CHECK-NEXT: [[TMP0:%.*]] = load <16 x i8>, ptr @vuca, align 16 // CHECK-NEXT: [[TMP1:%.*]] = load <16 x i8>, ptr @vucb, align 16 // CHECK-NEXT: [[TMP2:%.*]] = load <16 x i8>, ptr @vucc, align 16 // CHECK-NEXT: [[TMP3:%.*]] = call <16 x i8> @llvm.ppc.xxssumudmcext(<16 x i8> [[TMP0]], <16 x i8> [[TMP1]], <16 x i8> [[TMP2]], i32 1) // CHECK-NEXT: ret <16 x i8> [[TMP3]] // vector unsigned char test_xxssumudmcext() { return __builtin_xxssumudmcext(vuca, vucb, vucc, 1); } // CHECK-LABEL: @test_xsaddadduqm( // CHECK-NEXT: entry: // CHECK-NEXT: [[TMP0:%.*]] = load <16 x i8>, ptr @vuca, align 16 // CHECK-NEXT: [[TMP1:%.*]] = load <16 x i8>, ptr @vucb, align 16 // CHECK-NEXT: [[TMP2:%.*]] = call <16 x i8> @llvm.ppc.xsaddadduqm(<16 x i8> [[TMP0]], <16 x i8> [[TMP1]]) // CHECK-NEXT: ret <16 x i8> [[TMP2]] // vector unsigned char test_xsaddadduqm() { return __builtin_xsaddadduqm(vuca, vucb); } // CHECK-LABEL: @test_xsaddaddsuqm( // CHECK-NEXT: entry: // CHECK-NEXT: [[TMP0:%.*]] = load <16 x i8>, ptr @vuca, align 16 // CHECK-NEXT: [[TMP1:%.*]] = load <16 x i8>, ptr @vucb, align 16 // CHECK-NEXT: [[TMP2:%.*]] = call <16 x i8> @llvm.ppc.xsaddaddsuqm(<16 x i8> [[TMP0]], <16 x i8> [[TMP1]]) // CHECK-NEXT: ret <16 x i8> [[TMP2]] // vector unsigned char test_xsaddaddsuqm() { return __builtin_xsaddaddsuqm(vuca, vucb); } // CHECK-LABEL: @test_xsaddsubuqm( // CHECK-NEXT: entry: // CHECK-NEXT: [[TMP0:%.*]] = load <16 x i8>, ptr @vuca, align 16 // CHECK-NEXT: [[TMP1:%.*]] = load <16 x i8>, ptr @vucb, align 16 // CHECK-NEXT: [[TMP2:%.*]] = call <16 x i8> @llvm.ppc.xsaddsubuqm(<16 x i8> [[TMP0]], <16 x i8> [[TMP1]]) // CHECK-NEXT: ret <16 x i8> [[TMP2]] // vector unsigned char test_xsaddsubuqm() { return __builtin_xsaddsubuqm(vuca, vucb); } // CHECK-LABEL: @test_xsaddsubsuqm( // CHECK-NEXT: entry: // CHECK-NEXT: [[TMP0:%.*]] = load <16 x i8>, ptr @vuca, align 16 // CHECK-NEXT: [[TMP1:%.*]] = load <16 x i8>, ptr @vucb, align 16 // CHECK-NEXT: [[TMP2:%.*]] = call <16 x i8> @llvm.ppc.xsaddsubsuqm(<16 x i8> [[TMP0]], <16 x i8> [[TMP1]]) // CHECK-NEXT: ret <16 x i8> [[TMP2]] // vector unsigned char test_xsaddsubsuqm() { return __builtin_xsaddsubsuqm(vuca, vucb); } // CHECK-LABEL: @test_xsmerge2t1uqm( // CHECK-NEXT: entry: // CHECK-NEXT: [[TMP0:%.*]] = load <16 x i8>, ptr @vuca, align 16 // CHECK-NEXT: [[TMP1:%.*]] = load <16 x i8>, ptr @vucb, align 16 // CHECK-NEXT: [[TMP2:%.*]] = call <16 x i8> @llvm.ppc.xsmerge2t1uqm(<16 x i8> [[TMP0]], <16 x i8> [[TMP1]]) // CHECK-NEXT: ret <16 x i8> [[TMP2]] // vector unsigned char test_xsmerge2t1uqm() { return __builtin_xsmerge2t1uqm(vuca, vucb); } // CHECK-LABEL: @test_xsmerge2t2uqm( // CHECK-NEXT: entry: // CHECK-NEXT: [[TMP0:%.*]] = load <16 x i8>, ptr @vuca, align 16 // CHECK-NEXT: [[TMP1:%.*]] = load <16 x i8>, ptr @vucb, align 16 // CHECK-NEXT: [[TMP2:%.*]] = call <16 x i8> @llvm.ppc.xsmerge2t2uqm(<16 x i8> [[TMP0]], <16 x i8> [[TMP1]]) // CHECK-NEXT: ret <16 x i8> [[TMP2]] // vector unsigned char test_xsmerge2t2uqm() { return __builtin_xsmerge2t2uqm(vuca, vucb); } // CHECK-LABEL: @test_xsmerge2t3uqm( // CHECK-NEXT: entry: // CHECK-NEXT: [[TMP0:%.*]] = load <16 x i8>, ptr @vuca, align 16 // CHECK-NEXT: [[TMP1:%.*]] = load <16 x i8>, ptr @vucb, align 16 // CHECK-NEXT: [[TMP2:%.*]] = call <16 x i8> @llvm.ppc.xsmerge2t3uqm(<16 x i8> [[TMP0]], <16 x i8> [[TMP1]]) // CHECK-NEXT: ret <16 x i8> [[TMP2]] // vector unsigned char test_xsmerge2t3uqm() { return __builtin_xsmerge2t3uqm(vuca, vucb); } // CHECK-LABEL: @test_xsmerge3t1uqm( // CHECK-NEXT: entry: // CHECK-NEXT: [[TMP0:%.*]] = load <16 x i8>, ptr @vuca, align 16 // CHECK-NEXT: [[TMP1:%.*]] = load <16 x i8>, ptr @vucb, align 16 // CHECK-NEXT: [[TMP2:%.*]] = call <16 x i8> @llvm.ppc.xsmerge3t1uqm(<16 x i8> [[TMP0]], <16 x i8> [[TMP1]]) // CHECK-NEXT: ret <16 x i8> [[TMP2]] // vector unsigned char test_xsmerge3t1uqm() { return __builtin_xsmerge3t1uqm(vuca, vucb); } // CHECK-LABEL: @test_xsrebase2t1uqm( // CHECK-NEXT: entry: // CHECK-NEXT: [[TMP0:%.*]] = load <16 x i8>, ptr @vuca, align 16 // CHECK-NEXT: [[TMP1:%.*]] = load <16 x i8>, ptr @vucb, align 16 // CHECK-NEXT: [[TMP2:%.*]] = call <16 x i8> @llvm.ppc.xsrebase2t1uqm(<16 x i8> [[TMP0]], <16 x i8> [[TMP1]]) // CHECK-NEXT: ret <16 x i8> [[TMP2]] // vector unsigned char test_xsrebase2t1uqm() { return __builtin_xsrebase2t1uqm(vuca, vucb); } // CHECK-LABEL: @test_xsrebase2t2uqm( // CHECK-NEXT: entry: // CHECK-NEXT: [[TMP0:%.*]] = load <16 x i8>, ptr @vuca, align 16 // CHECK-NEXT: [[TMP1:%.*]] = load <16 x i8>, ptr @vucb, align 16 // CHECK-NEXT: [[TMP2:%.*]] = call <16 x i8> @llvm.ppc.xsrebase2t2uqm(<16 x i8> [[TMP0]], <16 x i8> [[TMP1]]) // CHECK-NEXT: ret <16 x i8> [[TMP2]] // vector unsigned char test_xsrebase2t2uqm() { return __builtin_xsrebase2t2uqm(vuca, vucb); } // CHECK-LABEL: @test_xsrebase2t3uqm( // CHECK-NEXT: entry: // CHECK-NEXT: [[TMP0:%.*]] = load <16 x i8>, ptr @vuca, align 16 // CHECK-NEXT: [[TMP1:%.*]] = load <16 x i8>, ptr @vucb, align 16 // CHECK-NEXT: [[TMP2:%.*]] = call <16 x i8> @llvm.ppc.xsrebase2t3uqm(<16 x i8> [[TMP0]], <16 x i8> [[TMP1]]) // CHECK-NEXT: ret <16 x i8> [[TMP2]] // vector unsigned char test_xsrebase2t3uqm() { return __builtin_xsrebase2t3uqm(vuca, vucb); } // CHECK-LABEL: @test_xsrebase2t4uqm( // CHECK-NEXT: entry: // CHECK-NEXT: [[TMP0:%.*]] = load <16 x i8>, ptr @vuca, align 16 // CHECK-NEXT: [[TMP1:%.*]] = load <16 x i8>, ptr @vucb, align 16 // CHECK-NEXT: [[TMP2:%.*]] = call <16 x i8> @llvm.ppc.xsrebase2t4uqm(<16 x i8> [[TMP0]], <16 x i8> [[TMP1]]) // CHECK-NEXT: ret <16 x i8> [[TMP2]] // vector unsigned char test_xsrebase2t4uqm() { return __builtin_xsrebase2t4uqm(vuca, vucb); } // CHECK-LABEL: @test_xsrebase3t1uqm( // CHECK-NEXT: entry: // CHECK-NEXT: [[TMP0:%.*]] = load <16 x i8>, ptr @vuca, align 16 // CHECK-NEXT: [[TMP1:%.*]] = load <16 x i8>, ptr @vucb, align 16 // CHECK-NEXT: [[TMP2:%.*]] = call <16 x i8> @llvm.ppc.xsrebase3t1uqm(<16 x i8> [[TMP0]], <16 x i8> [[TMP1]]) // CHECK-NEXT: ret <16 x i8> [[TMP2]] // vector unsigned char test_xsrebase3t1uqm() { return __builtin_xsrebase3t1uqm(vuca, vucb); } // CHECK-LABEL: @test_xsrebase3t2uqm( // CHECK-NEXT: entry: // CHECK-NEXT: [[TMP0:%.*]] = load <16 x i8>, ptr @vuca, align 16 // CHECK-NEXT: [[TMP1:%.*]] = load <16 x i8>, ptr @vucb, align 16 // CHECK-NEXT: [[TMP2:%.*]] = call <16 x i8> @llvm.ppc.xsrebase3t2uqm(<16 x i8> [[TMP0]], <16 x i8> [[TMP1]]) // CHECK-NEXT: ret <16 x i8> [[TMP2]] // vector unsigned char test_xsrebase3t2uqm() { return __builtin_xsrebase3t2uqm(vuca, vucb); } // CHECK-LABEL: @test_xsrebase3t3uqm( // CHECK-NEXT: entry: // CHECK-NEXT: [[TMP0:%.*]] = load <16 x i8>, ptr @vuca, align 16 // CHECK-NEXT: [[TMP1:%.*]] = load <16 x i8>, ptr @vucb, align 16 // CHECK-NEXT: [[TMP2:%.*]] = call <16 x i8> @llvm.ppc.xsrebase3t3uqm(<16 x i8> [[TMP0]], <16 x i8> [[TMP1]]) // CHECK-NEXT: ret <16 x i8> [[TMP2]] // vector unsigned char test_xsrebase3t3uqm() { return __builtin_xsrebase3t3uqm(vuca, vucb); }