1cff7d2fdSLuis Marques; NOTE: Assertions have been autogenerated by utils/update_analyze_test_checks.py 2cb941f92SLuke Lau; RUN: opt -mtriple=riscv32 -mattr=+v -passes="print<cost-model>" 2>&1 \ 3cb941f92SLuke Lau; RUN: -disable-output < %s | FileCheck %s -check-prefix=RVI 4cb941f92SLuke Lau; RUN: opt -mtriple=riscv64 -mattr=+v -passes="print<cost-model>" 2>&1 \ 5cb941f92SLuke Lau; RUN: -disable-output < %s | FileCheck %s -check-prefix=RVI 6cff7d2fdSLuis Marques 768c50b11SNikita Popovdefine void @testi8(ptr %a, i32 %i) { 8cff7d2fdSLuis Marques; RVI-LABEL: 'testi8' 968c50b11SNikita Popov; RVI-NEXT: Cost Model: Found an estimated cost of 0 for instruction: %a1 = getelementptr inbounds i8, ptr %a, i32 1 10cb941f92SLuke Lau; RVI-NEXT: Cost Model: Found an estimated cost of 1 for instruction: store volatile i8 undef, ptr %a1, align 1 1168c50b11SNikita Popov; RVI-NEXT: Cost Model: Found an estimated cost of 0 for instruction: %a2 = getelementptr inbounds i8, ptr %a, i32 -1 12cb941f92SLuke Lau; RVI-NEXT: Cost Model: Found an estimated cost of 1 for instruction: store volatile i8 undef, ptr %a2, align 1 1368c50b11SNikita Popov; RVI-NEXT: Cost Model: Found an estimated cost of 0 for instruction: %a3 = getelementptr inbounds i8, ptr %a, i32 2047 14cb941f92SLuke Lau; RVI-NEXT: Cost Model: Found an estimated cost of 1 for instruction: store volatile i8 undef, ptr %a3, align 1 1568c50b11SNikita Popov; RVI-NEXT: Cost Model: Found an estimated cost of 1 for instruction: %a4 = getelementptr inbounds i8, ptr %a, i32 2048 16cb941f92SLuke Lau; RVI-NEXT: Cost Model: Found an estimated cost of 1 for instruction: store volatile i8 undef, ptr %a4, align 1 1768c50b11SNikita Popov; RVI-NEXT: Cost Model: Found an estimated cost of 0 for instruction: %a5 = getelementptr inbounds i8, ptr %a, i32 -2048 18cb941f92SLuke Lau; RVI-NEXT: Cost Model: Found an estimated cost of 1 for instruction: store volatile i8 undef, ptr %a5, align 1 1968c50b11SNikita Popov; RVI-NEXT: Cost Model: Found an estimated cost of 1 for instruction: %a6 = getelementptr inbounds i8, ptr %a, i32 -2049 20cb941f92SLuke Lau; RVI-NEXT: Cost Model: Found an estimated cost of 1 for instruction: store volatile i8 undef, ptr %a6, align 1 2168c50b11SNikita Popov; RVI-NEXT: Cost Model: Found an estimated cost of 1 for instruction: %ai = getelementptr inbounds i8, ptr %a, i32 %i 22cb941f92SLuke Lau; RVI-NEXT: Cost Model: Found an estimated cost of 1 for instruction: store volatile i8 undef, ptr %ai, align 1 230a5d52a7SSergey Kachkov; RVI-NEXT: Cost Model: Found an estimated cost of 0 for instruction: ret void 24cff7d2fdSLuis Marques; 2568c50b11SNikita Popov %a1 = getelementptr inbounds i8, ptr %a, i32 1 26cb941f92SLuke Lau store volatile i8 undef, ptr %a1 2768c50b11SNikita Popov %a2 = getelementptr inbounds i8, ptr %a, i32 -1 28cb941f92SLuke Lau store volatile i8 undef, ptr %a2 2968c50b11SNikita Popov %a3 = getelementptr inbounds i8, ptr %a, i32 2047 30cb941f92SLuke Lau store volatile i8 undef, ptr %a3 3168c50b11SNikita Popov %a4 = getelementptr inbounds i8, ptr %a, i32 2048 32cb941f92SLuke Lau store volatile i8 undef, ptr %a4 3368c50b11SNikita Popov %a5 = getelementptr inbounds i8, ptr %a, i32 -2048 34cb941f92SLuke Lau store volatile i8 undef, ptr %a5 3568c50b11SNikita Popov %a6 = getelementptr inbounds i8, ptr %a, i32 -2049 36cb941f92SLuke Lau store volatile i8 undef, ptr %a6 3768c50b11SNikita Popov %ai = getelementptr inbounds i8, ptr %a, i32 %i 38cb941f92SLuke Lau store volatile i8 undef, ptr %ai 39cff7d2fdSLuis Marques ret void 40cff7d2fdSLuis Marques} 41cff7d2fdSLuis Marques 4268c50b11SNikita Popovdefine void @testi16(ptr %a, i32 %i) { 43cff7d2fdSLuis Marques; RVI-LABEL: 'testi16' 4468c50b11SNikita Popov; RVI-NEXT: Cost Model: Found an estimated cost of 0 for instruction: %a1 = getelementptr inbounds i16, ptr %a, i32 1 45cb941f92SLuke Lau; RVI-NEXT: Cost Model: Found an estimated cost of 1 for instruction: store volatile i16 undef, ptr %a1, align 2 4668c50b11SNikita Popov; RVI-NEXT: Cost Model: Found an estimated cost of 0 for instruction: %a2 = getelementptr inbounds i16, ptr %a, i32 -1 47cb941f92SLuke Lau; RVI-NEXT: Cost Model: Found an estimated cost of 1 for instruction: store volatile i16 undef, ptr %a2, align 2 4868c50b11SNikita Popov; RVI-NEXT: Cost Model: Found an estimated cost of 0 for instruction: %a3 = getelementptr inbounds i16, ptr %a, i32 1023 49cb941f92SLuke Lau; RVI-NEXT: Cost Model: Found an estimated cost of 1 for instruction: store volatile i16 undef, ptr %a3, align 2 5068c50b11SNikita Popov; RVI-NEXT: Cost Model: Found an estimated cost of 1 for instruction: %a4 = getelementptr inbounds i16, ptr %a, i32 1024 51cb941f92SLuke Lau; RVI-NEXT: Cost Model: Found an estimated cost of 1 for instruction: store volatile i16 undef, ptr %a4, align 2 5268c50b11SNikita Popov; RVI-NEXT: Cost Model: Found an estimated cost of 0 for instruction: %a5 = getelementptr inbounds i16, ptr %a, i32 -1024 53cb941f92SLuke Lau; RVI-NEXT: Cost Model: Found an estimated cost of 1 for instruction: store volatile i16 undef, ptr %a5, align 2 5468c50b11SNikita Popov; RVI-NEXT: Cost Model: Found an estimated cost of 1 for instruction: %a6 = getelementptr inbounds i16, ptr %a, i32 -1025 55cb941f92SLuke Lau; RVI-NEXT: Cost Model: Found an estimated cost of 1 for instruction: store volatile i16 undef, ptr %a6, align 2 5668c50b11SNikita Popov; RVI-NEXT: Cost Model: Found an estimated cost of 1 for instruction: %ai = getelementptr inbounds i16, ptr %a, i32 %i 57cb941f92SLuke Lau; RVI-NEXT: Cost Model: Found an estimated cost of 1 for instruction: store volatile i16 undef, ptr %ai, align 2 580a5d52a7SSergey Kachkov; RVI-NEXT: Cost Model: Found an estimated cost of 0 for instruction: ret void 59cff7d2fdSLuis Marques; 6068c50b11SNikita Popov %a1 = getelementptr inbounds i16, ptr %a, i32 1 61cb941f92SLuke Lau store volatile i16 undef, ptr %a1 6268c50b11SNikita Popov %a2 = getelementptr inbounds i16, ptr %a, i32 -1 63cb941f92SLuke Lau store volatile i16 undef, ptr %a2 6468c50b11SNikita Popov %a3 = getelementptr inbounds i16, ptr %a, i32 1023 65cb941f92SLuke Lau store volatile i16 undef, ptr %a3 6668c50b11SNikita Popov %a4 = getelementptr inbounds i16, ptr %a, i32 1024 67cb941f92SLuke Lau store volatile i16 undef, ptr %a4 6868c50b11SNikita Popov %a5 = getelementptr inbounds i16, ptr %a, i32 -1024 69cb941f92SLuke Lau store volatile i16 undef, ptr %a5 7068c50b11SNikita Popov %a6 = getelementptr inbounds i16, ptr %a, i32 -1025 71cb941f92SLuke Lau store volatile i16 undef, ptr %a6 7268c50b11SNikita Popov %ai = getelementptr inbounds i16, ptr %a, i32 %i 73cb941f92SLuke Lau store volatile i16 undef, ptr %ai 74cff7d2fdSLuis Marques ret void 75cff7d2fdSLuis Marques} 76cff7d2fdSLuis Marques 7768c50b11SNikita Popovdefine void @testi32(ptr %a, i32 %i) { 78cff7d2fdSLuis Marques; RVI-LABEL: 'testi32' 7968c50b11SNikita Popov; RVI-NEXT: Cost Model: Found an estimated cost of 0 for instruction: %a1 = getelementptr inbounds i32, ptr %a, i32 1 80cb941f92SLuke Lau; RVI-NEXT: Cost Model: Found an estimated cost of 1 for instruction: store volatile i32 undef, ptr %a1, align 4 8168c50b11SNikita Popov; RVI-NEXT: Cost Model: Found an estimated cost of 0 for instruction: %a2 = getelementptr inbounds i32, ptr %a, i32 -1 82cb941f92SLuke Lau; RVI-NEXT: Cost Model: Found an estimated cost of 1 for instruction: store volatile i32 undef, ptr %a2, align 4 8368c50b11SNikita Popov; RVI-NEXT: Cost Model: Found an estimated cost of 0 for instruction: %a3 = getelementptr inbounds i32, ptr %a, i32 511 84cb941f92SLuke Lau; RVI-NEXT: Cost Model: Found an estimated cost of 1 for instruction: store volatile i32 undef, ptr %a3, align 4 8568c50b11SNikita Popov; RVI-NEXT: Cost Model: Found an estimated cost of 1 for instruction: %a4 = getelementptr inbounds i32, ptr %a, i32 512 86cb941f92SLuke Lau; RVI-NEXT: Cost Model: Found an estimated cost of 1 for instruction: store volatile i32 undef, ptr %a4, align 4 8768c50b11SNikita Popov; RVI-NEXT: Cost Model: Found an estimated cost of 0 for instruction: %a5 = getelementptr inbounds i32, ptr %a, i32 -512 88cb941f92SLuke Lau; RVI-NEXT: Cost Model: Found an estimated cost of 1 for instruction: store volatile i32 undef, ptr %a5, align 4 8968c50b11SNikita Popov; RVI-NEXT: Cost Model: Found an estimated cost of 1 for instruction: %a6 = getelementptr inbounds i32, ptr %a, i32 -513 90cb941f92SLuke Lau; RVI-NEXT: Cost Model: Found an estimated cost of 1 for instruction: store volatile i32 undef, ptr %a6, align 4 9168c50b11SNikita Popov; RVI-NEXT: Cost Model: Found an estimated cost of 1 for instruction: %ai = getelementptr inbounds i32, ptr %a, i32 %i 92cb941f92SLuke Lau; RVI-NEXT: Cost Model: Found an estimated cost of 1 for instruction: store volatile i32 undef, ptr %ai, align 4 930a5d52a7SSergey Kachkov; RVI-NEXT: Cost Model: Found an estimated cost of 0 for instruction: ret void 94cff7d2fdSLuis Marques; 9568c50b11SNikita Popov %a1 = getelementptr inbounds i32, ptr %a, i32 1 96cb941f92SLuke Lau store volatile i32 undef, ptr %a1 9768c50b11SNikita Popov %a2 = getelementptr inbounds i32, ptr %a, i32 -1 98cb941f92SLuke Lau store volatile i32 undef, ptr %a2 9968c50b11SNikita Popov %a3 = getelementptr inbounds i32, ptr %a, i32 511 100cb941f92SLuke Lau store volatile i32 undef, ptr %a3 10168c50b11SNikita Popov %a4 = getelementptr inbounds i32, ptr %a, i32 512 102cb941f92SLuke Lau store volatile i32 undef, ptr %a4 10368c50b11SNikita Popov %a5 = getelementptr inbounds i32, ptr %a, i32 -512 104cb941f92SLuke Lau store volatile i32 undef, ptr %a5 10568c50b11SNikita Popov %a6 = getelementptr inbounds i32, ptr %a, i32 -513 106cb941f92SLuke Lau store volatile i32 undef, ptr %a6 10768c50b11SNikita Popov %ai = getelementptr inbounds i32, ptr %a, i32 %i 108cb941f92SLuke Lau store volatile i32 undef, ptr %ai 109cff7d2fdSLuis Marques ret void 110cff7d2fdSLuis Marques} 111cff7d2fdSLuis Marques 11268c50b11SNikita Popovdefine void @testi64(ptr %a, i32 %i) { 11368c50b11SNikita Popov %a1 = getelementptr inbounds i64, ptr %a, i32 1 114cb941f92SLuke Lau store volatile i64 undef, ptr %a1 11568c50b11SNikita Popov %a2 = getelementptr inbounds i64, ptr %a, i32 -1 116cb941f92SLuke Lau store volatile i64 undef, ptr %a2 11768c50b11SNikita Popov %a3 = getelementptr inbounds i64, ptr %a, i32 255 118cb941f92SLuke Lau store volatile i64 undef, ptr %a3 11968c50b11SNikita Popov %a4 = getelementptr inbounds i64, ptr %a, i32 256 120cb941f92SLuke Lau store volatile i64 undef, ptr %a4 12168c50b11SNikita Popov %a5 = getelementptr inbounds i64, ptr %a, i32 -256 122cb941f92SLuke Lau store volatile i64 undef, ptr %a5 12368c50b11SNikita Popov %a6 = getelementptr inbounds i64, ptr %a, i32 -257 124cb941f92SLuke Lau store volatile i64 undef, ptr %a6 12568c50b11SNikita Popov %ai = getelementptr inbounds i64, ptr %a, i32 %i 126cb941f92SLuke Lau store volatile i64 undef, ptr %ai 127cff7d2fdSLuis Marques ret void 128cff7d2fdSLuis Marques} 129cff7d2fdSLuis Marques 13068c50b11SNikita Popovdefine void @testfloat(ptr %a, i32 %i) { 131cff7d2fdSLuis Marques; RVI-LABEL: 'testfloat' 13268c50b11SNikita Popov; RVI-NEXT: Cost Model: Found an estimated cost of 0 for instruction: %a1 = getelementptr inbounds float, ptr %a, i32 1 133cb941f92SLuke Lau; RVI-NEXT: Cost Model: Found an estimated cost of 1 for instruction: store volatile float undef, ptr %a1, align 4 13468c50b11SNikita Popov; RVI-NEXT: Cost Model: Found an estimated cost of 0 for instruction: %a2 = getelementptr inbounds float, ptr %a, i32 -1 135cb941f92SLuke Lau; RVI-NEXT: Cost Model: Found an estimated cost of 1 for instruction: store volatile float undef, ptr %a2, align 4 13668c50b11SNikita Popov; RVI-NEXT: Cost Model: Found an estimated cost of 0 for instruction: %a3 = getelementptr inbounds float, ptr %a, i32 511 137cb941f92SLuke Lau; RVI-NEXT: Cost Model: Found an estimated cost of 1 for instruction: store volatile float undef, ptr %a3, align 4 13868c50b11SNikita Popov; RVI-NEXT: Cost Model: Found an estimated cost of 1 for instruction: %a4 = getelementptr inbounds float, ptr %a, i32 512 139cb941f92SLuke Lau; RVI-NEXT: Cost Model: Found an estimated cost of 1 for instruction: store volatile float undef, ptr %a4, align 4 14068c50b11SNikita Popov; RVI-NEXT: Cost Model: Found an estimated cost of 0 for instruction: %a5 = getelementptr inbounds float, ptr %a, i32 -512 141cb941f92SLuke Lau; RVI-NEXT: Cost Model: Found an estimated cost of 1 for instruction: store volatile float undef, ptr %a5, align 4 14268c50b11SNikita Popov; RVI-NEXT: Cost Model: Found an estimated cost of 1 for instruction: %a6 = getelementptr inbounds float, ptr %a, i32 -513 143cb941f92SLuke Lau; RVI-NEXT: Cost Model: Found an estimated cost of 1 for instruction: store volatile float undef, ptr %a6, align 4 14468c50b11SNikita Popov; RVI-NEXT: Cost Model: Found an estimated cost of 1 for instruction: %ai = getelementptr inbounds float, ptr %a, i32 %i 145cb941f92SLuke Lau; RVI-NEXT: Cost Model: Found an estimated cost of 1 for instruction: store volatile float undef, ptr %ai, align 4 1460a5d52a7SSergey Kachkov; RVI-NEXT: Cost Model: Found an estimated cost of 0 for instruction: ret void 147cff7d2fdSLuis Marques; 14868c50b11SNikita Popov %a1 = getelementptr inbounds float, ptr %a, i32 1 149cb941f92SLuke Lau store volatile float undef, ptr %a1 15068c50b11SNikita Popov %a2 = getelementptr inbounds float, ptr %a, i32 -1 151cb941f92SLuke Lau store volatile float undef, ptr %a2 15268c50b11SNikita Popov %a3 = getelementptr inbounds float, ptr %a, i32 511 153cb941f92SLuke Lau store volatile float undef, ptr %a3 15468c50b11SNikita Popov %a4 = getelementptr inbounds float, ptr %a, i32 512 155cb941f92SLuke Lau store volatile float undef, ptr %a4 15668c50b11SNikita Popov %a5 = getelementptr inbounds float, ptr %a, i32 -512 157cb941f92SLuke Lau store volatile float undef, ptr %a5 15868c50b11SNikita Popov %a6 = getelementptr inbounds float, ptr %a, i32 -513 159cb941f92SLuke Lau store volatile float undef, ptr %a6 16068c50b11SNikita Popov %ai = getelementptr inbounds float, ptr %a, i32 %i 161cb941f92SLuke Lau store volatile float undef, ptr %ai 162cff7d2fdSLuis Marques ret void 163cff7d2fdSLuis Marques} 164cff7d2fdSLuis Marques 16568c50b11SNikita Popovdefine void @testdouble(ptr %a, i32 %i) { 166cff7d2fdSLuis Marques; RVI-LABEL: 'testdouble' 16768c50b11SNikita Popov; RVI-NEXT: Cost Model: Found an estimated cost of 0 for instruction: %a1 = getelementptr inbounds double, ptr %a, i32 1 168cb941f92SLuke Lau; RVI-NEXT: Cost Model: Found an estimated cost of 1 for instruction: store volatile double undef, ptr %a1, align 8 16968c50b11SNikita Popov; RVI-NEXT: Cost Model: Found an estimated cost of 0 for instruction: %a2 = getelementptr inbounds double, ptr %a, i32 -1 170cb941f92SLuke Lau; RVI-NEXT: Cost Model: Found an estimated cost of 1 for instruction: store volatile double undef, ptr %a2, align 8 17168c50b11SNikita Popov; RVI-NEXT: Cost Model: Found an estimated cost of 0 for instruction: %a3 = getelementptr inbounds double, ptr %a, i32 255 172cb941f92SLuke Lau; RVI-NEXT: Cost Model: Found an estimated cost of 1 for instruction: store volatile double undef, ptr %a3, align 8 17368c50b11SNikita Popov; RVI-NEXT: Cost Model: Found an estimated cost of 1 for instruction: %a4 = getelementptr inbounds double, ptr %a, i32 256 174cb941f92SLuke Lau; RVI-NEXT: Cost Model: Found an estimated cost of 1 for instruction: store volatile double undef, ptr %a4, align 8 17568c50b11SNikita Popov; RVI-NEXT: Cost Model: Found an estimated cost of 0 for instruction: %a5 = getelementptr inbounds double, ptr %a, i32 -256 176cb941f92SLuke Lau; RVI-NEXT: Cost Model: Found an estimated cost of 1 for instruction: store volatile double undef, ptr %a5, align 8 17768c50b11SNikita Popov; RVI-NEXT: Cost Model: Found an estimated cost of 1 for instruction: %a6 = getelementptr inbounds double, ptr %a, i32 -257 178cb941f92SLuke Lau; RVI-NEXT: Cost Model: Found an estimated cost of 1 for instruction: store volatile double undef, ptr %a6, align 8 17968c50b11SNikita Popov; RVI-NEXT: Cost Model: Found an estimated cost of 1 for instruction: %ai = getelementptr inbounds double, ptr %a, i32 %i 180cb941f92SLuke Lau; RVI-NEXT: Cost Model: Found an estimated cost of 1 for instruction: store volatile double undef, ptr %ai, align 8 1810a5d52a7SSergey Kachkov; RVI-NEXT: Cost Model: Found an estimated cost of 0 for instruction: ret void 182cff7d2fdSLuis Marques; 18368c50b11SNikita Popov %a1 = getelementptr inbounds double, ptr %a, i32 1 184cb941f92SLuke Lau store volatile double undef, ptr %a1 18568c50b11SNikita Popov %a2 = getelementptr inbounds double, ptr %a, i32 -1 186cb941f92SLuke Lau store volatile double undef, ptr %a2 18768c50b11SNikita Popov %a3 = getelementptr inbounds double, ptr %a, i32 255 188cb941f92SLuke Lau store volatile double undef, ptr %a3 18968c50b11SNikita Popov %a4 = getelementptr inbounds double, ptr %a, i32 256 190cb941f92SLuke Lau store volatile double undef, ptr %a4 19168c50b11SNikita Popov %a5 = getelementptr inbounds double, ptr %a, i32 -256 192cb941f92SLuke Lau store volatile double undef, ptr %a5 19368c50b11SNikita Popov %a6 = getelementptr inbounds double, ptr %a, i32 -257 194cb941f92SLuke Lau store volatile double undef, ptr %a6 19568c50b11SNikita Popov %ai = getelementptr inbounds double, ptr %a, i32 %i 196cb941f92SLuke Lau store volatile double undef, ptr %ai 197cff7d2fdSLuis Marques ret void 198cff7d2fdSLuis Marques} 199cff7d2fdSLuis Marques 200cff7d2fdSLuis Marquesdefine void @testvecs(i32 %i) { 201cff7d2fdSLuis Marques; RVI-LABEL: 'testvecs' 202cb941f92SLuke Lau; RVI-NEXT: Cost Model: Found an estimated cost of 1 for instruction: %b0 = getelementptr inbounds <4 x i8>, ptr undef, i32 1 203cb941f92SLuke Lau; RVI-NEXT: Cost Model: Found an estimated cost of 1 for instruction: store volatile <4 x i8> undef, ptr %b0, align 4 204cb941f92SLuke Lau; RVI-NEXT: Cost Model: Found an estimated cost of 1 for instruction: %b1 = getelementptr inbounds <4 x i16>, ptr undef, i32 1 205cb941f92SLuke Lau; RVI-NEXT: Cost Model: Found an estimated cost of 1 for instruction: store volatile <4 x i16> undef, ptr %b1, align 8 206cb941f92SLuke Lau; RVI-NEXT: Cost Model: Found an estimated cost of 1 for instruction: %b2 = getelementptr inbounds <4 x i32>, ptr undef, i32 1 207cb941f92SLuke Lau; RVI-NEXT: Cost Model: Found an estimated cost of 1 for instruction: store volatile <4 x i32> undef, ptr %b2, align 16 208cb941f92SLuke Lau; RVI-NEXT: Cost Model: Found an estimated cost of 1 for instruction: %b3 = getelementptr inbounds <4 x i64>, ptr undef, i32 1 209cb941f92SLuke Lau; RVI-NEXT: Cost Model: Found an estimated cost of 2 for instruction: store volatile <4 x i64> undef, ptr %b3, align 32 210cb941f92SLuke Lau; RVI-NEXT: Cost Model: Found an estimated cost of 1 for instruction: %b4 = getelementptr inbounds <4 x float>, ptr undef, i32 1 211cb941f92SLuke Lau; RVI-NEXT: Cost Model: Found an estimated cost of 1 for instruction: store volatile <4 x float> undef, ptr %b4, align 16 212cb941f92SLuke Lau; RVI-NEXT: Cost Model: Found an estimated cost of 1 for instruction: %b5 = getelementptr inbounds <4 x double>, ptr undef, i32 1 213cb941f92SLuke Lau; RVI-NEXT: Cost Model: Found an estimated cost of 2 for instruction: store volatile <4 x double> undef, ptr %b5, align 32 214cb941f92SLuke Lau; RVI-NEXT: Cost Model: Found an estimated cost of 1 for instruction: %c1 = getelementptr inbounds <4 x i8>, ptr undef, i32 128 215cb941f92SLuke Lau; RVI-NEXT: Cost Model: Found an estimated cost of 1 for instruction: store volatile <4 x i8> undef, ptr %c1, align 4 216cb941f92SLuke Lau; RVI-NEXT: Cost Model: Found an estimated cost of 1 for instruction: %c2 = getelementptr inbounds <4 x i16>, ptr undef, i32 128 217cb941f92SLuke Lau; RVI-NEXT: Cost Model: Found an estimated cost of 1 for instruction: store volatile <4 x i16> undef, ptr %c2, align 8 21868c50b11SNikita Popov; RVI-NEXT: Cost Model: Found an estimated cost of 1 for instruction: %c3 = getelementptr inbounds <4 x i32>, ptr undef, i32 128 219cb941f92SLuke Lau; RVI-NEXT: Cost Model: Found an estimated cost of 1 for instruction: store volatile <4 x i32> undef, ptr %c3, align 16 22068c50b11SNikita Popov; RVI-NEXT: Cost Model: Found an estimated cost of 1 for instruction: %c4 = getelementptr inbounds <4 x i64>, ptr undef, i32 128 221cb941f92SLuke Lau; RVI-NEXT: Cost Model: Found an estimated cost of 2 for instruction: store volatile <4 x i64> undef, ptr %c4, align 32 22268c50b11SNikita Popov; RVI-NEXT: Cost Model: Found an estimated cost of 1 for instruction: %c5 = getelementptr inbounds <4 x float>, ptr undef, i32 128 223cb941f92SLuke Lau; RVI-NEXT: Cost Model: Found an estimated cost of 1 for instruction: store volatile <4 x float> undef, ptr %c5, align 16 22468c50b11SNikita Popov; RVI-NEXT: Cost Model: Found an estimated cost of 1 for instruction: %c6 = getelementptr inbounds <4 x double>, ptr undef, i32 128 225cb941f92SLuke Lau; RVI-NEXT: Cost Model: Found an estimated cost of 2 for instruction: store volatile <4 x double> undef, ptr %c6, align 32 2260a5d52a7SSergey Kachkov; RVI-NEXT: Cost Model: Found an estimated cost of 0 for instruction: ret void 227cff7d2fdSLuis Marques; 228cff7d2fdSLuis Marques 22968c50b11SNikita Popov %b0 = getelementptr inbounds <4 x i8>, ptr undef, i32 1 230cb941f92SLuke Lau store volatile <4 x i8> undef, ptr %b0 23168c50b11SNikita Popov %b1 = getelementptr inbounds <4 x i16>, ptr undef, i32 1 232cb941f92SLuke Lau store volatile <4 x i16> undef, ptr %b1 23368c50b11SNikita Popov %b2 = getelementptr inbounds <4 x i32>, ptr undef, i32 1 234cb941f92SLuke Lau store volatile <4 x i32> undef, ptr %b2 23568c50b11SNikita Popov %b3 = getelementptr inbounds <4 x i64>, ptr undef, i32 1 236cb941f92SLuke Lau store volatile <4 x i64> undef, ptr %b3 23768c50b11SNikita Popov %b4 = getelementptr inbounds <4 x float>, ptr undef, i32 1 238cb941f92SLuke Lau store volatile <4 x float> undef, ptr %b4 23968c50b11SNikita Popov %b5 = getelementptr inbounds <4 x double>, ptr undef, i32 1 240cb941f92SLuke Lau store volatile <4 x double> undef, ptr %b5 241cff7d2fdSLuis Marques 24268c50b11SNikita Popov %c1 = getelementptr inbounds <4 x i8>, ptr undef, i32 128 243cb941f92SLuke Lau store volatile <4 x i8> undef, ptr %c1 24468c50b11SNikita Popov %c2 = getelementptr inbounds <4 x i16>, ptr undef, i32 128 245cb941f92SLuke Lau store volatile <4 x i16> undef, ptr %c2 24668c50b11SNikita Popov %c3 = getelementptr inbounds <4 x i32>, ptr undef, i32 128 247cb941f92SLuke Lau store volatile <4 x i32> undef, ptr %c3 24868c50b11SNikita Popov %c4 = getelementptr inbounds <4 x i64>, ptr undef, i32 128 249cb941f92SLuke Lau store volatile <4 x i64> undef, ptr %c4 25068c50b11SNikita Popov %c5 = getelementptr inbounds <4 x float>, ptr undef, i32 128 251cb941f92SLuke Lau store volatile <4 x float> undef, ptr %c5 25268c50b11SNikita Popov %c6 = getelementptr inbounds <4 x double>, ptr undef, i32 128 253cb941f92SLuke Lau store volatile <4 x double> undef, ptr %c6 254cff7d2fdSLuis Marques 255cff7d2fdSLuis Marques ret void 256cff7d2fdSLuis Marques} 257cb941f92SLuke Lau 258cb941f92SLuke Lau; Ensure that memory operations of a different type than the pointer source type 259cb941f92SLuke Lau; use the correct type to determine if folding is possible. These operations 260cb941f92SLuke Lau; are on vector types so there should be a cost for the GEP as the offset cannot 261cb941f92SLuke Lau; be folded into the instruction. 262cb941f92SLuke Laudefine void @non_foldable_vector_uses(ptr %base, <2 x ptr> %base.vec) { 263cb941f92SLuke Lau; RVI-LABEL: 'non_foldable_vector_uses' 264a68dcd09SLuke Lau; RVI-NEXT: Cost Model: Found an estimated cost of 1 for instruction: %1 = getelementptr i8, ptr %base, i32 42 265cb941f92SLuke Lau; RVI-NEXT: Cost Model: Found an estimated cost of 1 for instruction: %x1 = load volatile <2 x i8>, ptr %1, align 2 266a68dcd09SLuke Lau; RVI-NEXT: Cost Model: Found an estimated cost of 1 for instruction: %2 = getelementptr i8, ptr %base, i32 42 267cb941f92SLuke Lau; RVI-NEXT: Cost Model: Found an estimated cost of 1 for instruction: %x2 = call <2 x i8> @llvm.masked.load.v2i8.p0(ptr %2, i32 1, <2 x i1> undef, <2 x i8> undef) 268cb941f92SLuke Lau; RVI-NEXT: Cost Model: Found an estimated cost of 1 for instruction: %3 = getelementptr i8, <2 x ptr> %base.vec, <2 x i32> <i32 42, i32 43> 269cb941f92SLuke Lau; RVI-NEXT: Cost Model: Found an estimated cost of 2 for instruction: %x3 = call <2 x i8> @llvm.masked.gather.v2i8.v2p0(<2 x ptr> %3, i32 1, <2 x i1> undef, <2 x i8> undef) 270a68dcd09SLuke Lau; RVI-NEXT: Cost Model: Found an estimated cost of 1 for instruction: %4 = getelementptr i8, ptr %base, i32 42 271*7f6bbb3cSPhilip Reames; RVI-NEXT: Cost Model: Found an estimated cost of 4 for instruction: %x4 = call <2 x i8> @llvm.masked.expandload.v2i8(ptr %4, <2 x i1> undef, <2 x i8> undef) 272a68dcd09SLuke Lau; RVI-NEXT: Cost Model: Found an estimated cost of 1 for instruction: %5 = getelementptr i8, ptr %base, i32 42 2732483763fSMichael Maitland; RVI-NEXT: Cost Model: Found an estimated cost of 1 for instruction: %x5 = call <2 x i8> @llvm.vp.load.v2i8.p0(ptr %5, <2 x i1> undef, i32 undef) 274a68dcd09SLuke Lau; RVI-NEXT: Cost Model: Found an estimated cost of 1 for instruction: %6 = getelementptr i8, ptr %base, i32 42 275b78b2645SPhilip Reames; RVI-NEXT: Cost Model: Found an estimated cost of 2 for instruction: %x6 = call <2 x i8> @llvm.experimental.vp.strided.load.v2i8.p0.i64(ptr %6, i64 undef, <2 x i1> undef, i32 undef) 276a68dcd09SLuke Lau; RVI-NEXT: Cost Model: Found an estimated cost of 1 for instruction: %7 = getelementptr i8, ptr %base, i32 42 277cb941f92SLuke Lau; RVI-NEXT: Cost Model: Found an estimated cost of 1 for instruction: store volatile <2 x i8> undef, ptr %7, align 2 278a68dcd09SLuke Lau; RVI-NEXT: Cost Model: Found an estimated cost of 1 for instruction: %8 = getelementptr i8, ptr %base, i32 42 279cb941f92SLuke Lau; RVI-NEXT: Cost Model: Found an estimated cost of 1 for instruction: call void @llvm.masked.store.v2i8.p0(<2 x i8> undef, ptr %8, i32 1, <2 x i1> undef) 280cb941f92SLuke Lau; RVI-NEXT: Cost Model: Found an estimated cost of 1 for instruction: %9 = getelementptr i8, <2 x ptr> %base.vec, <2 x i32> <i32 42, i32 43> 281cb941f92SLuke Lau; RVI-NEXT: Cost Model: Found an estimated cost of 2 for instruction: call void @llvm.masked.scatter.v2i8.v2p0(<2 x i8> undef, <2 x ptr> %9, i32 1, <2 x i1> undef) 282a68dcd09SLuke Lau; RVI-NEXT: Cost Model: Found an estimated cost of 1 for instruction: %10 = getelementptr i8, ptr %base, i32 42 283cb941f92SLuke Lau; RVI-NEXT: Cost Model: Found an estimated cost of 12 for instruction: call void @llvm.masked.compressstore.v2i8(<2 x i8> undef, ptr %10, <2 x i1> undef) 284a68dcd09SLuke Lau; RVI-NEXT: Cost Model: Found an estimated cost of 1 for instruction: %11 = getelementptr i8, ptr %base, i32 42 2852483763fSMichael Maitland; RVI-NEXT: Cost Model: Found an estimated cost of 1 for instruction: call void @llvm.vp.store.v2i8.p0(<2 x i8> undef, ptr %11, <2 x i1> undef, i32 undef) 286a68dcd09SLuke Lau; RVI-NEXT: Cost Model: Found an estimated cost of 1 for instruction: %12 = getelementptr i8, ptr %base, i32 42 287b78b2645SPhilip Reames; RVI-NEXT: Cost Model: Found an estimated cost of 2 for instruction: call void @llvm.experimental.vp.strided.store.v2i8.p0.i64(<2 x i8> undef, ptr %12, i64 undef, <2 x i1> undef, i32 undef) 2880a5d52a7SSergey Kachkov; RVI-NEXT: Cost Model: Found an estimated cost of 0 for instruction: ret void 289cb941f92SLuke Lau; 290cb941f92SLuke Lau %1 = getelementptr i8, ptr %base, i32 42 291cb941f92SLuke Lau %x1 = load volatile <2 x i8>, ptr %1 292cb941f92SLuke Lau 293cb941f92SLuke Lau %2 = getelementptr i8, ptr %base, i32 42 294cb941f92SLuke Lau %x2 = call <2 x i8> @llvm.masked.load.v2i8.p0(ptr %2, i32 1, <2 x i1> undef, <2 x i8> undef) 295cb941f92SLuke Lau 296cb941f92SLuke Lau %3 = getelementptr i8, <2 x ptr> %base.vec, <2 x i32> <i32 42, i32 43> 297cb941f92SLuke Lau %x3 = call <2 x i8> @llvm.masked.gather.v2i8.v2p0(<2 x ptr> %3, i32 1, <2 x i1> undef, <2 x i8> undef) 298cb941f92SLuke Lau 299cb941f92SLuke Lau %4 = getelementptr i8, ptr %base, i32 42 300cb941f92SLuke Lau %x4 = call <2 x i8> @llvm.masked.expandload.v2i8(ptr %4, <2 x i1> undef, <2 x i8> undef) 301cb941f92SLuke Lau 302cb941f92SLuke Lau %5 = getelementptr i8, ptr %base, i32 42 303cb941f92SLuke Lau %x5 = call <2 x i8> @llvm.vp.load.v2i8.p0(ptr %5, <2 x i1> undef, i32 undef) 304cb941f92SLuke Lau 305cb941f92SLuke Lau %6 = getelementptr i8, ptr %base, i32 42 306cb941f92SLuke Lau %x6 = call <2 x i8> @llvm.experimental.vp.strided.load.v2i8.i64(ptr %6, i64 undef, <2 x i1> undef, i32 undef) 307cb941f92SLuke Lau 308cb941f92SLuke Lau %7 = getelementptr i8, ptr %base, i32 42 309cb941f92SLuke Lau store volatile <2 x i8> undef, ptr %7 310cb941f92SLuke Lau 311cb941f92SLuke Lau %8 = getelementptr i8, ptr %base, i32 42 312cb941f92SLuke Lau call void @llvm.masked.store.v2i8.p0(<2 x i8> undef, ptr %8, i32 1, <2 x i1> undef) 313cb941f92SLuke Lau 314cb941f92SLuke Lau %9 = getelementptr i8, <2 x ptr> %base.vec, <2 x i32> <i32 42, i32 43> 315cb941f92SLuke Lau call void @llvm.masked.scatter.v2i8.v2p0(<2 x i8> undef, <2 x ptr> %9, i32 1, <2 x i1> undef) 316cb941f92SLuke Lau 317cb941f92SLuke Lau %10 = getelementptr i8, ptr %base, i32 42 318cb941f92SLuke Lau call void @llvm.masked.compressstore.v2i8(<2 x i8> undef, ptr %10, <2 x i1> undef) 319cb941f92SLuke Lau 320cb941f92SLuke Lau %11 = getelementptr i8, ptr %base, i32 42 321cb941f92SLuke Lau call void @llvm.vp.store.v2i8.p0(<2 x i8> undef, ptr %11, <2 x i1> undef, i32 undef) 322cb941f92SLuke Lau 323cb941f92SLuke Lau %12 = getelementptr i8, ptr %base, i32 42 324cb941f92SLuke Lau call void @llvm.experimental.vp.strided.store.v2i8.i64(<2 x i8> undef, ptr %12, i64 undef, <2 x i1> undef, i32 undef) 325cb941f92SLuke Lau 326cb941f92SLuke Lau ret void 327cb941f92SLuke Lau} 328cb941f92SLuke Lau 329cb941f92SLuke Lau; Despite the fact that these are vector loads and stores which doesn't allow an 330cb941f92SLuke Lau; offset in the addressing mode, because the offsets are zero we don't actually 331cb941f92SLuke Lau; need to do any calculation for the GEP and thus it should be free. 332cb941f92SLuke Laudefine void @foldable_vector_uses(ptr %base, <2 x ptr> %base.vec) { 333cb941f92SLuke Lau; RVI-LABEL: 'foldable_vector_uses' 334cb941f92SLuke Lau; RVI-NEXT: Cost Model: Found an estimated cost of 0 for instruction: %1 = getelementptr i8, ptr %base, i32 0 335cb941f92SLuke Lau; RVI-NEXT: Cost Model: Found an estimated cost of 1 for instruction: %x1 = load volatile <2 x i8>, ptr %1, align 2 336cb941f92SLuke Lau; RVI-NEXT: Cost Model: Found an estimated cost of 0 for instruction: %2 = getelementptr i8, ptr %base, i32 0 337cb941f92SLuke Lau; RVI-NEXT: Cost Model: Found an estimated cost of 1 for instruction: %x2 = call <2 x i8> @llvm.masked.load.v2i8.p0(ptr %2, i32 1, <2 x i1> undef, <2 x i8> undef) 338cb941f92SLuke Lau; RVI-NEXT: Cost Model: Found an estimated cost of 0 for instruction: %3 = getelementptr i8, <2 x ptr> %base.vec, <2 x i32> zeroinitializer 339cb941f92SLuke Lau; RVI-NEXT: Cost Model: Found an estimated cost of 2 for instruction: %x3 = call <2 x i8> @llvm.masked.gather.v2i8.v2p0(<2 x ptr> %3, i32 1, <2 x i1> undef, <2 x i8> undef) 340cb941f92SLuke Lau; RVI-NEXT: Cost Model: Found an estimated cost of 0 for instruction: %4 = getelementptr i8, ptr %base, i32 0 341*7f6bbb3cSPhilip Reames; RVI-NEXT: Cost Model: Found an estimated cost of 4 for instruction: %x4 = call <2 x i8> @llvm.masked.expandload.v2i8(ptr %4, <2 x i1> undef, <2 x i8> undef) 342cb941f92SLuke Lau; RVI-NEXT: Cost Model: Found an estimated cost of 0 for instruction: %5 = getelementptr i8, ptr %base, i32 0 3432483763fSMichael Maitland; RVI-NEXT: Cost Model: Found an estimated cost of 1 for instruction: %x5 = call <2 x i8> @llvm.vp.load.v2i8.p0(ptr %5, <2 x i1> undef, i32 undef) 344cb941f92SLuke Lau; RVI-NEXT: Cost Model: Found an estimated cost of 0 for instruction: %6 = getelementptr i8, ptr %base, i32 0 345b78b2645SPhilip Reames; RVI-NEXT: Cost Model: Found an estimated cost of 2 for instruction: %x6 = call <2 x i8> @llvm.experimental.vp.strided.load.v2i8.p0.i64(ptr %6, i64 undef, <2 x i1> undef, i32 undef) 346cb941f92SLuke Lau; RVI-NEXT: Cost Model: Found an estimated cost of 0 for instruction: %7 = getelementptr i8, ptr %base, i32 0 347cb941f92SLuke Lau; RVI-NEXT: Cost Model: Found an estimated cost of 1 for instruction: store volatile <2 x i8> undef, ptr %7, align 2 348cb941f92SLuke Lau; RVI-NEXT: Cost Model: Found an estimated cost of 0 for instruction: %8 = getelementptr i8, ptr %base, i32 0 349cb941f92SLuke Lau; RVI-NEXT: Cost Model: Found an estimated cost of 1 for instruction: call void @llvm.masked.store.v2i8.p0(<2 x i8> undef, ptr %8, i32 1, <2 x i1> undef) 350cb941f92SLuke Lau; RVI-NEXT: Cost Model: Found an estimated cost of 0 for instruction: %9 = getelementptr i8, <2 x ptr> %base.vec, <2 x i32> zeroinitializer 351cb941f92SLuke Lau; RVI-NEXT: Cost Model: Found an estimated cost of 2 for instruction: call void @llvm.masked.scatter.v2i8.v2p0(<2 x i8> undef, <2 x ptr> %9, i32 1, <2 x i1> undef) 352cb941f92SLuke Lau; RVI-NEXT: Cost Model: Found an estimated cost of 0 for instruction: %10 = getelementptr i8, ptr %base, i32 0 353cb941f92SLuke Lau; RVI-NEXT: Cost Model: Found an estimated cost of 12 for instruction: call void @llvm.masked.compressstore.v2i8(<2 x i8> undef, ptr %10, <2 x i1> undef) 354cb941f92SLuke Lau; RVI-NEXT: Cost Model: Found an estimated cost of 0 for instruction: %11 = getelementptr i8, ptr %base, i32 0 3552483763fSMichael Maitland; RVI-NEXT: Cost Model: Found an estimated cost of 1 for instruction: call void @llvm.vp.store.v2i8.p0(<2 x i8> undef, ptr %11, <2 x i1> undef, i32 undef) 356cb941f92SLuke Lau; RVI-NEXT: Cost Model: Found an estimated cost of 0 for instruction: %12 = getelementptr i8, ptr %base, i32 0 357b78b2645SPhilip Reames; RVI-NEXT: Cost Model: Found an estimated cost of 2 for instruction: call void @llvm.experimental.vp.strided.store.v2i8.p0.i64(<2 x i8> undef, ptr %12, i64 undef, <2 x i1> undef, i32 undef) 3580a5d52a7SSergey Kachkov; RVI-NEXT: Cost Model: Found an estimated cost of 0 for instruction: ret void 359cb941f92SLuke Lau; 360cb941f92SLuke Lau %1 = getelementptr i8, ptr %base, i32 0 361cb941f92SLuke Lau %x1 = load volatile <2 x i8>, ptr %1 362cb941f92SLuke Lau 363cb941f92SLuke Lau %2 = getelementptr i8, ptr %base, i32 0 364cb941f92SLuke Lau %x2 = call <2 x i8> @llvm.masked.load.v2i8.p0(ptr %2, i32 1, <2 x i1> undef, <2 x i8> undef) 365cb941f92SLuke Lau 366cb941f92SLuke Lau %3 = getelementptr i8, <2 x ptr> %base.vec, <2 x i32> <i32 0, i32 0> 367cb941f92SLuke Lau %x3 = call <2 x i8> @llvm.masked.gather.v2i8.v2p0(<2 x ptr> %3, i32 1, <2 x i1> undef, <2 x i8> undef) 368cb941f92SLuke Lau 369cb941f92SLuke Lau %4 = getelementptr i8, ptr %base, i32 0 370cb941f92SLuke Lau %x4 = call <2 x i8> @llvm.masked.expandload.v2i8(ptr %4, <2 x i1> undef, <2 x i8> undef) 371cb941f92SLuke Lau 372cb941f92SLuke Lau %5 = getelementptr i8, ptr %base, i32 0 373cb941f92SLuke Lau %x5 = call <2 x i8> @llvm.vp.load.v2i8.p0(ptr %5, <2 x i1> undef, i32 undef) 374cb941f92SLuke Lau 375cb941f92SLuke Lau %6 = getelementptr i8, ptr %base, i32 0 376cb941f92SLuke Lau %x6 = call <2 x i8> @llvm.experimental.vp.strided.load.v2i8.i64(ptr %6, i64 undef, <2 x i1> undef, i32 undef) 377cb941f92SLuke Lau 378cb941f92SLuke Lau %7 = getelementptr i8, ptr %base, i32 0 379cb941f92SLuke Lau store volatile <2 x i8> undef, ptr %7 380cb941f92SLuke Lau 381cb941f92SLuke Lau %8 = getelementptr i8, ptr %base, i32 0 382cb941f92SLuke Lau call void @llvm.masked.store.v2i8.p0(<2 x i8> undef, ptr %8, i32 1, <2 x i1> undef) 383cb941f92SLuke Lau 384cb941f92SLuke Lau %9 = getelementptr i8, <2 x ptr> %base.vec, <2 x i32> <i32 0, i32 0> 385cb941f92SLuke Lau call void @llvm.masked.scatter.v2i8.v2p0(<2 x i8> undef, <2 x ptr> %9, i32 1, <2 x i1> undef) 386cb941f92SLuke Lau 387cb941f92SLuke Lau %10 = getelementptr i8, ptr %base, i32 0 388cb941f92SLuke Lau call void @llvm.masked.compressstore.v2i8(<2 x i8> undef, ptr %10, <2 x i1> undef) 389cb941f92SLuke Lau 390cb941f92SLuke Lau %11 = getelementptr i8, ptr %base, i32 0 391cb941f92SLuke Lau call void @llvm.vp.store.v2i8.p0(<2 x i8> undef, ptr %11, <2 x i1> undef, i32 undef) 392cb941f92SLuke Lau 393cb941f92SLuke Lau %12 = getelementptr i8, ptr %base, i32 0 394cb941f92SLuke Lau call void @llvm.experimental.vp.strided.store.v2i8.i64(<2 x i8> undef, ptr %12, i64 undef, <2 x i1> undef, i32 undef) 395cb941f92SLuke Lau 396cb941f92SLuke Lau ret void 397cb941f92SLuke Lau} 398cb941f92SLuke Lau 399cb941f92SLuke Laudeclare <2 x i8> @llvm.masked.load.v2i8.p0(ptr, i32, <2 x i1>, <2 x i8>) 400cb941f92SLuke Laudeclare <2 x i8> @llvm.masked.gather.v2i8.v2p0(<2 x ptr>, i32, <2 x i1>, <2 x i8>) 401cb941f92SLuke Laudeclare <2 x i8> @llvm.masked.expandload.v2i8(ptr, <2 x i1>, <2 x i8>) 402cb941f92SLuke Laudeclare <2 x i8> @llvm.vp.load.v2i8.p0(ptr, <2 x i1>, i32) 403cb941f92SLuke Laudeclare <2 x i8> @llvm.experimental.vp.strided.load.v2i8.i64(ptr, i64, <2 x i1>, i32) 404cb941f92SLuke Lau 405cb941f92SLuke Laudeclare void @llvm.masked.store.v2i8.p0(<2 x i8>, ptr, i32, <2 x i1>) 406cb941f92SLuke Laudeclare void @llvm.masked.scatter.v2i8.v2p0(<2 x i8>, <2 x ptr>, i32, <2 x i1>) 407cb941f92SLuke Laudeclare void @llvm.masked.compressstore.v2i8(<2 x i8>, ptr, <2 x i1>) 408cb941f92SLuke Laudeclare void @llvm.vp.store.v2i8.p0(<2 x i8>, ptr, <2 x i1>, i32) 409cb941f92SLuke Laudeclare void @llvm.experimental.vp.strided.store.v2i8.i64(<2 x i8>, ptr, i64, <2 x i1>, i32) 410