Index: clang/include/clang/Basic/arm_mve.td =================================================================== --- clang/include/clang/Basic/arm_mve.td +++ clang/include/clang/Basic/arm_mve.td @@ -575,7 +575,8 @@ } foreach half = [ "b", "t" ] in { - defvar halfconst = !if(!eq(half, "b"), 0, 1); + defvar halfconst = !ne(half, "b"); +//// defvar halfconst = !if(!eq(half, "b"), 0, 1); let params = [f32], pnt = PNT_None in { def vcvt#half#q_f16: Intrinsic< @@ -1153,8 +1154,9 @@ multiclass DyadicImmShift { - defvar intparams = !if(!eq(!cast(outtype), !cast(Vector)), - [Vector], [outtype, Vector]); + defvar intparams = !if(!eq(outtype, Vector), [Vector], [outtype, Vector]); +//// defvar intparams = !if(!eq(!cast(outtype), !cast(Vector)), +//// [Vector], [outtype, Vector]); def q_n: Intrinsic< outtype, (args outtype:$a, Vector:$b, imm:$sh), @@ -1532,9 +1534,10 @@ // // So this foldl expression implements what you'd write in Python as // [srctype for srctype in T.All if srctype != desttype] - let params = !foldl([], T.All, tlist, srctype, !listconcat(tlist, - !if(!eq(!cast(desttype),!cast(srctype)),[],[srctype]))) - in { + let params = !filter(srctype, T.All, !ne(srctype, desttype)) in { +//// let params = !foldl([], T.All, tlist, srctype, !listconcat(tlist, +//// !if(!eq(!cast(desttype),!cast(srctype)),[],[srctype]))) +//// in { def "vreinterpretq_" # desttype: Intrinsic< VecOf, (args Vector:$x), (vreinterpret $x, VecOf)>; } @@ -1576,8 +1579,11 @@ defvar is_dest_float = !eq(desttype.kind, "f"); defvar is_dest_unsigned = !eq(desttype.kind, "u"); // First immediate operand of the LLVM intrinsic - defvar unsigned_flag = !if(is_dest_float, (unsignedflag Scalar), - !if(is_dest_unsigned, V.True, V.False)); + defvar unsigned_flag = !cond(is_dest_float : (unsignedflag Scalar), + is_dest_unsigned : V.True, + true : V.False); +//// defvar unsigned_flag = !if(is_dest_float, (unsignedflag Scalar), +//// !if(is_dest_unsigned, V.True, V.False)); // For float->int conversions _n and _x_n intrinsics are not polymorphic // because the signedness of the destination type cannot be inferred. defvar pnt_nx = !if(is_dest_float, PNT_2Type, PNT_None);