...for -mpaired-single at least. Although the patch shows the intention of making this specific to -mpaired-single, we don't distinguish between integer and float capabilities, so the condition effectively triggers for Loongson integer vectors too.
The patch is still correct for floats on Loongson, and the Loongson results are messy even without this patch, so I'm afraid I'm going to punt on them for now and concentrate on getting the standard ISA results clean. The lack of feedback to Richard's autovectorisation patches makes me wonder how much interest there is in Loongson these days anyway. Tested on mipsisa64-elf and mips64-linux-gnu. Applied. Richard gcc/testsuite/ * lib/target-supports.exp (proc check_effective_target_vect_perm) (check_effective_target_vect_extract_even_odd) (check_effective_target_vect_interleave): Return true for MIPS paired-single. Index: gcc/testsuite/lib/target-supports.exp =================================================================== --- gcc/testsuite/lib/target-supports.exp 2012-01-24 19:20:28.000000000 +0000 +++ gcc/testsuite/lib/target-supports.exp 2012-01-24 19:40:13.000000000 +0000 @@ -2759,7 +2759,9 @@ proc check_effective_target_vect_perm { || [istarget powerpc*-*-*] || [istarget spu-*-*] || [istarget i?86-*-*] - || [istarget x86_64-*-*] } { + || [istarget x86_64-*-*] + || ([istarget mips*-*-*] + && [check_effective_target_mpaired_single]) } { set et_vect_perm_saved 1 } } @@ -3484,8 +3486,10 @@ proc check_effective_target_vect_extract || [istarget i?86-*-*] || [istarget x86_64-*-*] || [istarget ia64-*-*] - || [istarget spu-*-*] } { - set et_vect_extract_even_odd_saved 1 + || [istarget spu-*-*] + || ([istarget mips*-*-*] + && [check_effective_target_mpaired_single]) } { + set et_vect_extract_even_odd_saved 1 } } @@ -3507,7 +3511,9 @@ proc check_effective_target_vect_interle || [istarget i?86-*-*] || [istarget x86_64-*-*] || [istarget ia64-*-*] - || [istarget spu-*-*] } { + || [istarget spu-*-*] + || ([istarget mips*-*-*] + && [check_effective_target_mpaired_single]) } { set et_vect_interleave_saved 1 } }