llvm / llvm-project

The LLVM Project is a collection of modular and reusable compiler and toolchain technologies.
http://llvm.org
Other
27.51k stars 11.3k forks source link

SystemZ Z13 Unsupported vector argument or return type #41420

Open llvmbot opened 5 years ago

llvmbot commented 5 years ago
Bugzilla Link 42075
Version trunk
OS FreeBSD
Attachments A file that, when run, should exemplify the bug.
Reporter LLVM Bugzilla Contributor
CC @uweigand

Extended Description

For some reason, when llc is run with options -mtriple=s390x -mcpu=z13 (without the second argument, the issue does not occur), llc prints "LLVM ERROR: Unsupported vector argument or return type" if the input file contains any function whose arguments or return types are, particularly v3f64, but also generally any vector type that is considered to be an extended type, such as v6f32.

It fails at an assert at VerifyVectorType in lib/Target/SystemZ/SystemZISelLowering.cpp. As far as I can tell, the code seems to run to completion and produce correct assembly as long as this assert is simply skipped in those cases. However, there is a comment indicating that a single element vector containing a 128 bit type is not supporting, suggesting that the assert was meant to catch this case but also ends up catching many other cases that it is not supposed to.

I have attached a test file.

uweigand commented 5 years ago

Right now, the SystemZ backend really only supports those LLVM vector types as argument / return types that the clang frontend will ever create.

(Specifically, clang will never use <3 x double> as LLVM argument / return type, but will create an indirect argument instead.)

This is mostly a sanity check given that we've not actually formally defined an ABI for those other types at this point, and I'd rather have a compile error than have the compiler just implicitly create a defacto ABI.

In principle, we could support those other types as well, by explicitly defining an ABI and ensuring this is correctly implemented in the back-end.

I'll have a look.

llvmbot commented 5 years ago

assigned to @uweigand