From patchwork Thu Oct 31 15:33:52 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Robin Dapp X-Patchwork-Id: 2004713 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@legolas.ozlabs.org Authentication-Results: legolas.ozlabs.org; dkim=pass (2048-bit key; unprotected) header.d=gmail.com header.i=@gmail.com header.a=rsa-sha256 header.s=20230601 header.b=SU+1GXsA; dkim-atps=neutral Authentication-Results: legolas.ozlabs.org; spf=pass (sender SPF authorized) smtp.mailfrom=gcc.gnu.org (client-ip=2620:52:3:1:0:246e:9693:128c; helo=server2.sourceware.org; envelope-from=gcc-patches-bounces~incoming=patchwork.ozlabs.org@gcc.gnu.org; receiver=patchwork.ozlabs.org) Received: from server2.sourceware.org (server2.sourceware.org [IPv6:2620:52:3:1:0:246e:9693:128c]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature ECDSA (secp384r1) server-digest SHA384) (No client certificate requested) by legolas.ozlabs.org (Postfix) with ESMTPS id 4XfSn54QlTz1xwF for ; Fri, 1 Nov 2024 02:38:01 +1100 (AEDT) Received: from server2.sourceware.org (localhost [IPv6:::1]) by sourceware.org (Postfix) with ESMTP id C30453857433 for ; Thu, 31 Oct 2024 15:37:59 +0000 (GMT) X-Original-To: gcc-patches@gcc.gnu.org Delivered-To: gcc-patches@gcc.gnu.org Received: from mail-wm1-x334.google.com (mail-wm1-x334.google.com [IPv6:2a00:1450:4864:20::334]) by sourceware.org (Postfix) with ESMTPS id 18E95385772C for ; Thu, 31 Oct 2024 15:34:05 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org 18E95385772C Authentication-Results: sourceware.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=gmail.com ARC-Filter: OpenARC Filter v1.0.0 sourceware.org 18E95385772C Authentication-Results: server2.sourceware.org; arc=none smtp.remote-ip=2a00:1450:4864:20::334 ARC-Seal: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1730388854; cv=none; b=d8p5i/6wReJLxQM5Hp21o0RzVz98ABQcdTfmK5AGUKnbNSYC7+wJZ002OeX6KGkGkZ9DZF9Cb+rji+u1aoGPCN9RGKi3ANhf+55jC5jnaE3xhpN5DlszkU6QHWtGH1AoHKp9+RuWjQe73F/RBLvTXUPalww4ixuqV7rIaIs2iv8= ARC-Message-Signature: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1730388854; c=relaxed/simple; bh=YjGglDBHpH+cGa37Z2eDnYL6PsnLYfiaEx8tsk0tKYA=; h=DKIM-Signature:From:To:Subject:Date:Message-ID:MIME-Version; b=tL9xVDM12S2oxBC2Z6FKiB5dNB6b5T7LNws69cBSoHGWr+AFi0M1jzjqB9zJIxce9X2A8xWq86aM3Gys/m6MJ0UxDUhHtHTohC70Pc6MjTuXP4/+nM/oJntL9IE/uSLs4Z2hdsYfJ94kHchdF+AgEmGbGvI/o7Ct4nZ+/MlsGho= ARC-Authentication-Results: i=1; server2.sourceware.org Received: by mail-wm1-x334.google.com with SMTP id 5b1f17b1804b1-4315df7b43fso9103715e9.0 for ; Thu, 31 Oct 2024 08:34:05 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1730388843; x=1730993643; darn=gcc.gnu.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=rpALkZnrocslLrW9xBCwe9CR2Retc5laFx6es7IHik8=; b=SU+1GXsAIveybTZGOnGCYaNDWgSNDSoGyQiqr6Qhit2YMjKyjxIeAI2AVmuusvsvVD hlxGLE72PICypRu0VELPleH4CmVOOPZSUKhJBNcq0lKoAneV1AhkA4An6Ie9QTfzxT9T V03bo2zhxlgSwHGi4EL4RbUIcjSPV9xzLogBbt6rW5+gidk96Kya5FO4lJQwlfxDe6fy 5MN+zcrKR4G2qWBJRWdi6Ky0BEDmgSL6c1vbVwvpCL1JEDkwd33QRUmzb5cIJ+rdWPTq DiPH37XJA/sUEEC5OiOnJFF7Q0A04A+6xW8nLQ4QamNVuU1BOu6oyI0OOA1E5AcypjJJ zyRA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1730388843; x=1730993643; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=rpALkZnrocslLrW9xBCwe9CR2Retc5laFx6es7IHik8=; b=Df4Z59dODjfhZp3OBrMlVfC4a7V9542skM+Gz1r0FdlohD0kPkapTm375kfi7e1ORh c68M+dz2o1IhHwhnbQE7m+EuGNwQvroQegx6mtOKJeSEJ7StTSAlsBIyqvptVPIwQHhw JbMgibJZe9PMWZj7Rg3tOtLSRMreyoMoiAfrL4A+NtuIUj4XCacQH3lKrbXjZoewcxZi PJxwvf6ondxU+vxO3WyKFMnbpkvtuFDtiEY3twOcE78jsP9r+ZKIBudzDYQ68GpavNso V83+BH30xPfZnRw5rAa+veROxv4rDgCjTtYWwCAwi8Ru9PqOWdDGuUUQSlkN5hwlDPhU z3rg== X-Gm-Message-State: AOJu0Yy3UCkqSoCqUVIbvAZJcn1xIkacaMaZQ8yuzqhN2Y8sKfFyYbCg 2dfWSbbknWavJtwUgiPasRQRRLoh1N97O3E9UmF82PbV1jnqmEGVxLuC0w== X-Google-Smtp-Source: AGHT+IGi8rzAaAyJt4EvKdO99H+Q69ifM+gnzFccf50dTH7+ZiJf4rADsbK5hZQILE8ELuXV2yGfWg== X-Received: by 2002:a05:600c:1552:b0:42c:de34:34be with SMTP id 5b1f17b1804b1-4319ac76422mr179620515e9.3.1730388842681; Thu, 31 Oct 2024 08:34:02 -0700 (PDT) Received: from x1c10.dc1.ventanamicro.com (ip-149-172-150-237.um42.pools.vodafone-ip.de. [149.172.150.237]) by smtp.gmail.com with ESMTPSA id ffacd0b85a97d-381c118905dsm2461557f8f.114.2024.10.31.08.34.01 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 31 Oct 2024 08:34:02 -0700 (PDT) From: rdapp.gcc@gmail.com To: gcc-patches@gcc.gnu.org Cc: rdapp.gcc@gmail.com, rguenther@suse.de, richard.sandiford@arm.com, jeffreyalaw@gmail.com, ams@baylibre.com, crazylht@gmail.com Subject: [PATCH v3 7/8] i386: Add else operand to masked loads. Date: Thu, 31 Oct 2024 16:33:52 +0100 Message-ID: <20241031153353.51254-8-rdapp.gcc@gmail.com> X-Mailer: git-send-email 2.47.0 In-Reply-To: <20241031153353.51254-1-rdapp.gcc@gmail.com> References: <20241031153353.51254-1-rdapp.gcc@gmail.com> MIME-Version: 1.0 X-BeenThere: gcc-patches@gcc.gnu.org X-Mailman-Version: 2.1.30 Precedence: list List-Id: Gcc-patches mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: gcc-patches-bounces~incoming=patchwork.ozlabs.org@gcc.gnu.org From: Robin Dapp This patch adds a zero else operand to masked loads, in particular the masked gather load builtins that are used for gather vectorization. gcc/ChangeLog: * config/i386/i386-expand.cc (ix86_expand_special_args_builtin): Add else-operand handling. (ix86_expand_builtin): Ditto. * config/i386/predicates.md (vcvtne2ps2bf_parallel): New predicate. (maskload_else_operand): Ditto. * config/i386/sse.md: Use predicate. --- gcc/config/i386/i386-expand.cc | 26 ++++++-- gcc/config/i386/predicates.md | 4 ++ gcc/config/i386/sse.md | 112 +++++++++++++++++++++------------ 3 files changed, 97 insertions(+), 45 deletions(-) diff --git a/gcc/config/i386/i386-expand.cc b/gcc/config/i386/i386-expand.cc index 36011cc6b35..1635144e579 100644 --- a/gcc/config/i386/i386-expand.cc +++ b/gcc/config/i386/i386-expand.cc @@ -12995,10 +12995,11 @@ ix86_expand_special_args_builtin (const struct builtin_description *d, { tree arg; rtx pat, op; - unsigned int i, nargs, arg_adjust, memory; + unsigned int i, nargs, arg_adjust, memory = -1; unsigned int constant = 100; bool aligned_mem = false; - rtx xops[4]; + rtx xops[4] = {}; + bool add_els = false; enum insn_code icode = d->icode; const struct insn_data_d *insn_p = &insn_data[icode]; machine_mode tmode = insn_p->operand[0].mode; @@ -13125,6 +13126,9 @@ ix86_expand_special_args_builtin (const struct builtin_description *d, case V4DI_FTYPE_PCV4DI_V4DI: case V4SI_FTYPE_PCV4SI_V4SI: case V2DI_FTYPE_PCV2DI_V2DI: + /* Two actual args but an additional else operand. */ + add_els = true; + /* Fallthru. */ case VOID_FTYPE_INT_INT64: nargs = 2; klass = load; @@ -13397,6 +13401,12 @@ ix86_expand_special_args_builtin (const struct builtin_description *d, xops[i]= op; } + if (add_els) + { + xops[i] = CONST0_RTX (GET_MODE (xops[0])); + nargs++; + } + switch (nargs) { case 0: @@ -13653,7 +13663,7 @@ ix86_expand_builtin (tree exp, rtx target, rtx subtarget, enum insn_code icode, icode2; tree fndecl = TREE_OPERAND (CALL_EXPR_FN (exp), 0); tree arg0, arg1, arg2, arg3, arg4; - rtx op0, op1, op2, op3, op4, pat, pat2, insn; + rtx op0, op1, op2, op3, op4, opels, pat, pat2, insn; machine_mode mode0, mode1, mode2, mode3, mode4; unsigned int fcode = DECL_MD_FUNCTION_CODE (fndecl); HOST_WIDE_INT bisa, bisa2; @@ -15560,12 +15570,15 @@ rdseed_step: op3 = copy_to_reg (op3); op3 = lowpart_subreg (mode3, op3, GET_MODE (op3)); } + if (!insn_data[icode].operand[5].predicate (op4, mode4)) { - error ("the last argument must be scale 1, 2, 4, 8"); - return const0_rtx; + error ("the last argument must be scale 1, 2, 4, 8"); + return const0_rtx; } + opels = CONST0_RTX (GET_MODE (subtarget)); + /* Optimize. If mask is known to have all high bits set, replace op0 with pc_rtx to signal that the instruction overwrites the whole destination and doesn't use its @@ -15634,7 +15647,8 @@ rdseed_step: } } - pat = GEN_FCN (icode) (subtarget, op0, op1, op2, op3, op4); + pat = GEN_FCN (icode) (subtarget, op0, op1, op2, op3, op4, opels); + if (! pat) return const0_rtx; emit_insn (pat); diff --git a/gcc/config/i386/predicates.md b/gcc/config/i386/predicates.md index 053312bbe27..7c7d8f61f11 100644 --- a/gcc/config/i386/predicates.md +++ b/gcc/config/i386/predicates.md @@ -2346,3 +2346,7 @@ (define_predicate "apx_evex_add_memory_operand" return true; }) + +(define_predicate "maskload_else_operand" + (and (match_code "const_int,const_vector") + (match_test "op == CONST0_RTX (GET_MODE (op))"))) diff --git a/gcc/config/i386/sse.md b/gcc/config/i386/sse.md index 2345015db1b..df90dd21072 100644 --- a/gcc/config/i386/sse.md +++ b/gcc/config/i386/sse.md @@ -28704,7 +28704,7 @@ (define_insn "_maskstore" (set_attr "btver2_decode" "vector") (set_attr "mode" "")]) -(define_expand "maskload" +(define_expand "maskload_1" [(set (match_operand:V48_128_256 0 "register_operand") (unspec:V48_128_256 [(match_operand: 2 "register_operand") @@ -28712,13 +28712,28 @@ (define_expand "maskload" UNSPEC_MASKMOV))] "TARGET_AVX") +(define_expand "maskload" + [(set (match_operand:V48_128_256 0 "register_operand") + (unspec:V48_128_256 + [(match_operand: 2 "register_operand") + (match_operand:V48_128_256 1 "memory_operand") + (match_operand:V48_128_256 3 "const0_operand")] + UNSPEC_MASKMOV))] + "TARGET_AVX" +{ + emit_insn (gen_maskload_1 (operands[0], + operands[1], + operands[2])); + DONE; +}) + (define_expand "maskload" [(set (match_operand:V48_AVX512VL 0 "register_operand") (vec_merge:V48_AVX512VL (unspec:V48_AVX512VL [(match_operand:V48_AVX512VL 1 "memory_operand")] UNSPEC_MASKLOAD) - (match_dup 0) + (match_operand:V48_AVX512VL 3 "const0_operand") (match_operand: 2 "register_operand")))] "TARGET_AVX512F") @@ -28728,8 +28743,9 @@ (define_expand "maskload" (unspec:VI12HFBF_AVX512VL [(match_operand:VI12HFBF_AVX512VL 1 "memory_operand")] UNSPEC_MASKLOAD) - (match_dup 0) - (match_operand: 2 "register_operand")))] + (match_operand:VI12HFBF_AVX512VL 3 "const0_operand") + (match_operand: 2 "register_operand"))) + ] "TARGET_AVX512BW") (define_expand "maskstore" @@ -29295,20 +29311,22 @@ (define_expand "avx2_gathersi" (unspec:VEC_GATHER_MODE [(match_operand:VEC_GATHER_MODE 1 "register_operand") (mem: - (match_par_dup 6 + (match_par_dup 7 [(match_operand 2 "vsib_address_operand") (match_operand: 3 "register_operand") - (match_operand:SI 5 "const1248_operand ")])) + (match_operand:SI 5 "const1248_operand ") + (match_operand:VEC_GATHER_MODE 6 "maskload_else_operand")])) (mem:BLK (scratch)) (match_operand:VEC_GATHER_MODE 4 "register_operand")] UNSPEC_GATHER)) - (clobber (match_scratch:VEC_GATHER_MODE 7))])] + (clobber (match_scratch:VEC_GATHER_MODE 8))])] "TARGET_AVX2" { - operands[6] - = gen_rtx_UNSPEC (Pmode, gen_rtvec (3, operands[2], operands[3], - operands[5]), UNSPEC_VSIBADDR); + operands[7] + = gen_rtx_UNSPEC (Pmode, gen_rtvec (4, operands[2], operands[3], + operands[5], operands[6]), + UNSPEC_VSIBADDR); }) (define_insn "*avx2_gathersi" @@ -29319,7 +29337,8 @@ (define_insn "*avx2_gathersi" [(unspec:P [(match_operand:P 3 "vsib_address_operand" "jb") (match_operand: 4 "register_operand" "x") - (match_operand:SI 6 "const1248_operand")] + (match_operand:SI 6 "const1248_operand") + (match_operand:VEC_GATHER_MODE 8 "maskload_else_operand")] UNSPEC_VSIBADDR)]) (mem:BLK (scratch)) (match_operand:VEC_GATHER_MODE 5 "register_operand" "1")] @@ -29340,7 +29359,8 @@ (define_insn "*avx2_gathersi_2" [(unspec:P [(match_operand:P 2 "vsib_address_operand" "jb") (match_operand: 3 "register_operand" "x") - (match_operand:SI 5 "const1248_operand")] + (match_operand:SI 5 "const1248_operand") + (match_operand:VEC_GATHER_MODE 7 "maskload_else_operand")] UNSPEC_VSIBADDR)]) (mem:BLK (scratch)) (match_operand:VEC_GATHER_MODE 4 "register_operand" "1")] @@ -29358,20 +29378,22 @@ (define_expand "avx2_gatherdi" (unspec:VEC_GATHER_MODE [(match_operand: 1 "register_operand") (mem: - (match_par_dup 6 + (match_par_dup 7 [(match_operand 2 "vsib_address_operand") (match_operand: 3 "register_operand") - (match_operand:SI 5 "const1248_operand ")])) + (match_operand:SI 5 "const1248_operand ") + (match_operand:VEC_GATHER_MODE 6 "maskload_else_operand")])) (mem:BLK (scratch)) (match_operand: 4 "register_operand")] UNSPEC_GATHER)) - (clobber (match_scratch:VEC_GATHER_MODE 7))])] + (clobber (match_scratch:VEC_GATHER_MODE 8))])] "TARGET_AVX2" { - operands[6] - = gen_rtx_UNSPEC (Pmode, gen_rtvec (3, operands[2], operands[3], - operands[5]), UNSPEC_VSIBADDR); + operands[7] + = gen_rtx_UNSPEC (Pmode, gen_rtvec (4, operands[2], operands[3], + operands[5], operands[6]), + UNSPEC_VSIBADDR); }) (define_insn "*avx2_gatherdi" @@ -29382,7 +29404,8 @@ (define_insn "*avx2_gatherdi" [(unspec:P [(match_operand:P 3 "vsib_address_operand" "jb") (match_operand: 4 "register_operand" "x") - (match_operand:SI 6 "const1248_operand")] + (match_operand:SI 6 "const1248_operand") + (match_operand:VEC_GATHER_MODE 8 "maskload_else_operand")] UNSPEC_VSIBADDR)]) (mem:BLK (scratch)) (match_operand: 5 "register_operand" "1")] @@ -29403,7 +29426,8 @@ (define_insn "*avx2_gatherdi_2" [(unspec:P [(match_operand:P 2 "vsib_address_operand" "jb") (match_operand: 3 "register_operand" "x") - (match_operand:SI 5 "const1248_operand")] + (match_operand:SI 5 "const1248_operand") + (match_operand:VEC_GATHER_MODE 7 "maskload_else_operand")] UNSPEC_VSIBADDR)]) (mem:BLK (scratch)) (match_operand: 4 "register_operand" "1")] @@ -29429,7 +29453,8 @@ (define_insn "*avx2_gatherdi_3" [(unspec:P [(match_operand:P 3 "vsib_address_operand" "jb") (match_operand: 4 "register_operand" "x") - (match_operand:SI 6 "const1248_operand")] + (match_operand:SI 6 "const1248_operand") + (match_operand:VI4F_256 8 "maskload_else_operand")] UNSPEC_VSIBADDR)]) (mem:BLK (scratch)) (match_operand: 5 "register_operand" "1")] @@ -29453,7 +29478,8 @@ (define_insn "*avx2_gatherdi_4" [(unspec:P [(match_operand:P 2 "vsib_address_operand" "jb") (match_operand: 3 "register_operand" "x") - (match_operand:SI 5 "const1248_operand")] + (match_operand:SI 5 "const1248_operand") + (match_operand:VI4F_256 7 "maskload_else_operand")] UNSPEC_VSIBADDR)]) (mem:BLK (scratch)) (match_operand: 4 "register_operand" "1")] @@ -29474,17 +29500,19 @@ (define_expand "_gathersi" [(match_operand:VI48F 1 "register_operand") (match_operand: 4 "register_operand") (mem: - (match_par_dup 6 + (match_par_dup 7 [(match_operand 2 "vsib_address_operand") (match_operand: 3 "register_operand") - (match_operand:SI 5 "const1248_operand")]))] + (match_operand:SI 5 "const1248_operand") + (match_operand:VI48F 6 "maskload_else_operand")]))] UNSPEC_GATHER)) - (clobber (match_scratch: 7))])] + (clobber (match_scratch: 8))])] "TARGET_AVX512F" { - operands[6] - = gen_rtx_UNSPEC (Pmode, gen_rtvec (3, operands[2], operands[3], - operands[5]), UNSPEC_VSIBADDR); + operands[7] + = gen_rtx_UNSPEC (Pmode, gen_rtvec (4, operands[2], operands[3], + operands[5], operands[6]), + UNSPEC_VSIBADDR); }) (define_insn "*avx512f_gathersi" @@ -29496,7 +29524,8 @@ (define_insn "*avx512f_gathersi" [(unspec:P [(match_operand:P 4 "vsib_address_operand" "Tv") (match_operand: 3 "register_operand" "v") - (match_operand:SI 5 "const1248_operand")] + (match_operand:SI 5 "const1248_operand") + (match_operand:VI48F 8 "maskload_else_operand")] UNSPEC_VSIBADDR)])] UNSPEC_GATHER)) (clobber (match_scratch: 2 "=&Yk"))] @@ -29517,7 +29546,8 @@ (define_insn "*avx512f_gathersi_2" [(unspec:P [(match_operand:P 3 "vsib_address_operand" "Tv") (match_operand: 2 "register_operand" "v") - (match_operand:SI 4 "const1248_operand")] + (match_operand:SI 4 "const1248_operand") + (match_operand:VI48F 7 "maskload_else_operand")] UNSPEC_VSIBADDR)])] UNSPEC_GATHER)) (clobber (match_scratch: 1 "=&Yk"))] @@ -29536,17 +29566,19 @@ (define_expand "_gatherdi" [(match_operand: 1 "register_operand") (match_operand:QI 4 "register_operand") (mem: - (match_par_dup 6 + (match_par_dup 7 [(match_operand 2 "vsib_address_operand") (match_operand: 3 "register_operand") - (match_operand:SI 5 "const1248_operand")]))] + (match_operand:SI 5 "const1248_operand") + (match_operand:VI48F 6 "maskload_else_operand")]))] UNSPEC_GATHER)) - (clobber (match_scratch:QI 7))])] + (clobber (match_scratch:QI 8))])] "TARGET_AVX512F" { - operands[6] - = gen_rtx_UNSPEC (Pmode, gen_rtvec (3, operands[2], operands[3], - operands[5]), UNSPEC_VSIBADDR); + operands[7] + = gen_rtx_UNSPEC (Pmode, gen_rtvec (4, operands[2], operands[3], + operands[5], operands[6]), + UNSPEC_VSIBADDR); }) (define_insn "*avx512f_gatherdi" @@ -29558,7 +29590,8 @@ (define_insn "*avx512f_gatherdi" [(unspec:P [(match_operand:P 4 "vsib_address_operand" "Tv") (match_operand: 3 "register_operand" "v") - (match_operand:SI 5 "const1248_operand")] + (match_operand:SI 5 "const1248_operand") + (match_operand:VI48F 8 "maskload_else_operand")] UNSPEC_VSIBADDR)])] UNSPEC_GATHER)) (clobber (match_scratch:QI 2 "=&Yk"))] @@ -29579,7 +29612,8 @@ (define_insn "*avx512f_gatherdi_2" [(unspec:P [(match_operand:P 3 "vsib_address_operand" "Tv") (match_operand: 2 "register_operand" "v") - (match_operand:SI 4 "const1248_operand")] + (match_operand:SI 4 "const1248_operand") + (match_operand:VI48F 7 "maskload_else_operand")] UNSPEC_VSIBADDR)])] UNSPEC_GATHER)) (clobber (match_scratch:QI 1 "=&Yk"))] @@ -29616,7 +29650,7 @@ (define_expand "_scattersi" operands[5] = gen_rtx_UNSPEC (Pmode, gen_rtvec (4, operands[0], operands[2], operands[4], operands[1]), - UNSPEC_VSIBADDR); + UNSPEC_VSIBADDR); }) (define_insn "*avx512f_scattersi"