forked from OSchip/llvm-project
[AMDGPU] Assembler: Support abs() syntax.
Support legacy SP3 abs(v1) syntax. InstPrinter still uses |v1|. Add tests. Differential Revision: http://reviews.llvm.org/D17887 llvm-svn: 263006
This commit is contained in:
parent
8e3f099497
commit
9b7577ed22
|
@ -1008,12 +1008,23 @@ AMDGPUAsmParser::parseOperand(OperandVector &Operands, StringRef Mnemonic) {
|
|||
getLexer().is(AsmToken::EndOfStatement))
|
||||
return ResTy;
|
||||
|
||||
bool Negate = false, Abs = false;
|
||||
bool Negate = false, Abs = false, Abs2 = false;
|
||||
|
||||
if (getLexer().getKind()== AsmToken::Minus) {
|
||||
Parser.Lex();
|
||||
Negate = true;
|
||||
}
|
||||
|
||||
if (getLexer().getKind() == AsmToken::Identifier && Parser.getTok().getString() == "abs") {
|
||||
Parser.Lex();
|
||||
Abs2 = true;
|
||||
if (getLexer().isNot(AsmToken::LParen)) {
|
||||
Error(Parser.getTok().getLoc(), "expected left paren after abs");
|
||||
return MatchOperand_ParseFail;
|
||||
}
|
||||
Parser.Lex();
|
||||
}
|
||||
|
||||
if (getLexer().getKind() == AsmToken::Pipe) {
|
||||
Parser.Lex();
|
||||
Abs = true;
|
||||
|
@ -1065,7 +1076,13 @@ AMDGPUAsmParser::parseOperand(OperandVector &Operands, StringRef Mnemonic) {
|
|||
Parser.Lex();
|
||||
Modifiers |= 0x2;
|
||||
}
|
||||
|
||||
if (Abs2) {
|
||||
if (getLexer().isNot(AsmToken::RParen)) {
|
||||
return MatchOperand_ParseFail;
|
||||
}
|
||||
Parser.Lex();
|
||||
Modifiers |= 0x2;
|
||||
}
|
||||
Operands.push_back(AMDGPUOperand::CreateReg(
|
||||
RegNo, S, E, getContext().getRegisterInfo(), &getSTI(),
|
||||
isForcedVOP3()));
|
||||
|
|
|
@ -52,14 +52,26 @@ v_cmp_lt_f32 s[2:3] -|v4|, v6
|
|||
// SICI: v_cmp_lt_f32_e64 s[2:3], -|v4|, v6 ; encoding: [0x02,0x01,0x02,0xd0,0x04,0x0d,0x02,0x20]
|
||||
// VI: v_cmp_lt_f32_e64 s[2:3], -|v4|, v6 ; encoding: [0x02,0x01,0x41,0xd0,0x04,0x0d,0x02,0x20]
|
||||
|
||||
v_cmp_lt_f32 s[2:3] -abs(v4), v6
|
||||
// SICI: v_cmp_lt_f32_e64 s[2:3], -|v4|, v6 ; encoding: [0x02,0x01,0x02,0xd0,0x04,0x0d,0x02,0x20]
|
||||
// VI: v_cmp_lt_f32_e64 s[2:3], -|v4|, v6 ; encoding: [0x02,0x01,0x41,0xd0,0x04,0x0d,0x02,0x20]
|
||||
|
||||
v_cmp_lt_f32 s[2:3] v4, -|v6|
|
||||
// SICI: v_cmp_lt_f32_e64 s[2:3], v4, -|v6| ; encoding: [0x02,0x02,0x02,0xd0,0x04,0x0d,0x02,0x40]
|
||||
// VI: v_cmp_lt_f32_e64 s[2:3], v4, -|v6| ; encoding: [0x02,0x02,0x41,0xd0,0x04,0x0d,0x02,0x40]
|
||||
|
||||
v_cmp_lt_f32 s[2:3] v4, -abs(v6)
|
||||
// SICI: v_cmp_lt_f32_e64 s[2:3], v4, -|v6| ; encoding: [0x02,0x02,0x02,0xd0,0x04,0x0d,0x02,0x40]
|
||||
// VI: v_cmp_lt_f32_e64 s[2:3], v4, -|v6| ; encoding: [0x02,0x02,0x41,0xd0,0x04,0x0d,0x02,0x40]
|
||||
|
||||
v_cmp_lt_f32 s[2:3] -|v4|, -|v6|
|
||||
// SICI: v_cmp_lt_f32_e64 s[2:3], -|v4|, -|v6| ; encoding: [0x02,0x03,0x02,0xd0,0x04,0x0d,0x02,0x60]
|
||||
// VI: v_cmp_lt_f32_e64 s[2:3], -|v4|, -|v6| ; encoding: [0x02,0x03,0x41,0xd0,0x04,0x0d,0x02,0x60]
|
||||
|
||||
v_cmp_lt_f32 s[2:3] -abs(v4), -abs(v6)
|
||||
// SICI: v_cmp_lt_f32_e64 s[2:3], -|v4|, -|v6| ; encoding: [0x02,0x03,0x02,0xd0,0x04,0x0d,0x02,0x60]
|
||||
// VI: v_cmp_lt_f32_e64 s[2:3], -|v4|, -|v6| ; encoding: [0x02,0x03,0x41,0xd0,0x04,0x0d,0x02,0x60]
|
||||
|
||||
//
|
||||
// Instruction tests:
|
||||
//
|
||||
|
@ -147,10 +159,18 @@ v_fract_f32 v1, |v2|
|
|||
// SICI: v_fract_f32_e64 v1, |v2| ; encoding: [0x01,0x01,0x40,0xd3,0x02,0x01,0x00,0x00]
|
||||
// VI: v_fract_f32_e64 v1, |v2| ; encoding: [0x01,0x01,0x5b,0xd1,0x02,0x01,0x00,0x00]
|
||||
|
||||
v_fract_f32 v1, abs(v2)
|
||||
// SICI: v_fract_f32_e64 v1, |v2| ; encoding: [0x01,0x01,0x40,0xd3,0x02,0x01,0x00,0x00]
|
||||
// VI: v_fract_f32_e64 v1, |v2| ; encoding: [0x01,0x01,0x5b,0xd1,0x02,0x01,0x00,0x00]
|
||||
|
||||
v_fract_f32 v1, -|v2|
|
||||
// SICI: v_fract_f32_e64 v1, -|v2| ; encoding: [0x01,0x01,0x40,0xd3,0x02,0x01,0x00,0x20]
|
||||
// VI: v_fract_f32_e64 v1, -|v2| ; encoding: [0x01,0x01,0x5b,0xd1,0x02,0x01,0x00,0x20]
|
||||
|
||||
v_fract_f32 v1, -abs(v2)
|
||||
// SICI: v_fract_f32_e64 v1, -|v2| ; encoding: [0x01,0x01,0x40,0xd3,0x02,0x01,0x00,0x20]
|
||||
// VI: v_fract_f32_e64 v1, -|v2| ; encoding: [0x01,0x01,0x5b,0xd1,0x02,0x01,0x00,0x20]
|
||||
|
||||
v_fract_f32 v1, v2 clamp
|
||||
// SICI: v_fract_f32_e64 v1, v2 clamp ; encoding: [0x01,0x08,0x40,0xd3,0x02,0x01,0x00,0x00]
|
||||
// VI: v_fract_f32_e64 v1, v2 clamp ; encoding: [0x01,0x80,0x5b,0xd1,0x02,0x01,0x00,0x00]
|
||||
|
@ -250,26 +270,50 @@ v_add_f64 v[0:1], |v[2:3]|, v[5:6]
|
|||
// SICI: v_add_f64 v[0:1], |v[2:3]|, v[5:6] ; encoding: [0x00,0x01,0xc8,0xd2,0x02,0x0b,0x02,0x00]
|
||||
// VI: v_add_f64 v[0:1], |v[2:3]|, v[5:6] ; encoding: [0x00,0x01,0x80,0xd2,0x02,0x0b,0x02,0x00]
|
||||
|
||||
v_add_f64 v[0:1], abs(v[2:3]), v[5:6]
|
||||
// SICI: v_add_f64 v[0:1], |v[2:3]|, v[5:6] ; encoding: [0x00,0x01,0xc8,0xd2,0x02,0x0b,0x02,0x00]
|
||||
// VI: v_add_f64 v[0:1], |v[2:3]|, v[5:6] ; encoding: [0x00,0x01,0x80,0xd2,0x02,0x0b,0x02,0x00]
|
||||
|
||||
v_add_f64_e64 v[0:1], |v[2:3]|, v[5:6]
|
||||
// SICI: v_add_f64 v[0:1], |v[2:3]|, v[5:6] ; encoding: [0x00,0x01,0xc8,0xd2,0x02,0x0b,0x02,0x00]
|
||||
// VI: v_add_f64 v[0:1], |v[2:3]|, v[5:6] ; encoding: [0x00,0x01,0x80,0xd2,0x02,0x0b,0x02,0x00]
|
||||
|
||||
v_add_f64_e64 v[0:1], abs(v[2:3]), v[5:6]
|
||||
// SICI: v_add_f64 v[0:1], |v[2:3]|, v[5:6] ; encoding: [0x00,0x01,0xc8,0xd2,0x02,0x0b,0x02,0x00]
|
||||
// VI: v_add_f64 v[0:1], |v[2:3]|, v[5:6] ; encoding: [0x00,0x01,0x80,0xd2,0x02,0x0b,0x02,0x00]
|
||||
|
||||
v_add_f64 v[0:1], v[2:3], |v[5:6]|
|
||||
// SICI: v_add_f64 v[0:1], v[2:3], |v[5:6]| ; encoding: [0x00,0x02,0xc8,0xd2,0x02,0x0b,0x02,0x00]
|
||||
// VI: v_add_f64 v[0:1], v[2:3], |v[5:6]| ; encoding: [0x00,0x02,0x80,0xd2,0x02,0x0b,0x02,0x00]
|
||||
|
||||
v_add_f64 v[0:1], v[2:3], abs(v[5:6])
|
||||
// SICI: v_add_f64 v[0:1], v[2:3], |v[5:6]| ; encoding: [0x00,0x02,0xc8,0xd2,0x02,0x0b,0x02,0x00]
|
||||
// VI: v_add_f64 v[0:1], v[2:3], |v[5:6]| ; encoding: [0x00,0x02,0x80,0xd2,0x02,0x0b,0x02,0x00]
|
||||
|
||||
v_add_f64_e64 v[0:1], v[2:3], |v[5:6]|
|
||||
// SICI: v_add_f64 v[0:1], v[2:3], |v[5:6]| ; encoding: [0x00,0x02,0xc8,0xd2,0x02,0x0b,0x02,0x00]
|
||||
// VI: v_add_f64 v[0:1], v[2:3], |v[5:6]| ; encoding: [0x00,0x02,0x80,0xd2,0x02,0x0b,0x02,0x00]
|
||||
|
||||
v_add_f64_e64 v[0:1], v[2:3], abs(v[5:6])
|
||||
// SICI: v_add_f64 v[0:1], v[2:3], |v[5:6]| ; encoding: [0x00,0x02,0xc8,0xd2,0x02,0x0b,0x02,0x00]
|
||||
// VI: v_add_f64 v[0:1], v[2:3], |v[5:6]| ; encoding: [0x00,0x02,0x80,0xd2,0x02,0x0b,0x02,0x00]
|
||||
|
||||
v_add_f64 v[0:1], -v[2:3], |v[5:6]| clamp mul:4
|
||||
// SICI: v_add_f64 v[0:1], -v[2:3], |v[5:6]| clamp mul:4 ; encoding: [0x00,0x0a,0xc8,0xd2,0x02,0x0b,0x02,0x30]
|
||||
// VI: v_add_f64 v[0:1], -v[2:3], |v[5:6]| clamp mul:4 ; encoding: [0x00,0x82,0x80,0xd2,0x02,0x0b,0x02,0x30]
|
||||
|
||||
v_add_f64 v[0:1], -v[2:3], abs(v[5:6]) clamp mul:4
|
||||
// SICI: v_add_f64 v[0:1], -v[2:3], |v[5:6]| clamp mul:4 ; encoding: [0x00,0x0a,0xc8,0xd2,0x02,0x0b,0x02,0x30]
|
||||
// VI: v_add_f64 v[0:1], -v[2:3], |v[5:6]| clamp mul:4 ; encoding: [0x00,0x82,0x80,0xd2,0x02,0x0b,0x02,0x30]
|
||||
|
||||
v_add_f64_e64 v[0:1], -v[2:3], |v[5:6]| clamp mul:4
|
||||
// SICI: v_add_f64 v[0:1], -v[2:3], |v[5:6]| clamp mul:4 ; encoding: [0x00,0x0a,0xc8,0xd2,0x02,0x0b,0x02,0x30]
|
||||
// VI: v_add_f64 v[0:1], -v[2:3], |v[5:6]| clamp mul:4 ; encoding: [0x00,0x82,0x80,0xd2,0x02,0x0b,0x02,0x30]
|
||||
|
||||
v_add_f64_e64 v[0:1], -v[2:3], abs(v[5:6]) clamp mul:4
|
||||
// SICI: v_add_f64 v[0:1], -v[2:3], |v[5:6]| clamp mul:4 ; encoding: [0x00,0x0a,0xc8,0xd2,0x02,0x0b,0x02,0x30]
|
||||
// VI: v_add_f64 v[0:1], -v[2:3], |v[5:6]| clamp mul:4 ; encoding: [0x00,0x82,0x80,0xd2,0x02,0x0b,0x02,0x30]
|
||||
|
||||
v_div_scale_f64 v[24:25], vcc, v[22:23], v[22:23], v[20:21]
|
||||
// SICI: v_div_scale_f64 v[24:25], vcc, v[22:23], v[22:23], v[20:21] ; encoding: [0x18,0x6a,0xdc,0xd2,0x16,0x2d,0x52,0x04]
|
||||
// VI: v_div_scale_f64 v[24:25], vcc, v[22:23], v[22:23], v[20:21] ; encoding: [0x18,0x6a,0xe1,0xd1,0x16,0x2d,0x52,0x04]
|
||||
|
|
Loading…
Reference in New Issue