Skip to content

Commit 59ea2ed

Browse files
[mips][msa] Range adjustment for ldi_b builtin function operand
Reasoning behind this change was allowing the function to accept all values from range [-128, 255] since all of them can be encoded in an 8bit wide value. This differs from the prior state where only range [-128, 127] was accepted, where values were assumed to be signed, whereas now the actual interpretation of the immediate is deferred to the consumer as required. Patch by Stefan Maksimovic. Differential Revision: https://reviews.llvm.org/D31082 git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@299229 91177308-0d34-0410-b5e6-96231b3b80d8
1 parent 40be91d commit 59ea2ed

File tree

3 files changed

+5
-3
lines changed

3 files changed

+5
-3
lines changed

lib/Sema/SemaChecking.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1640,7 +1640,7 @@ bool Sema::CheckMipsBuiltinFunctionCall(unsigned BuiltinID, CallExpr *TheCall) {
16401640
case Mips::BI__builtin_msa_sldi_d: i = 2; l = 0; u = 1; break;
16411641
// Memory offsets and immediate loads.
16421642
// These intrinsics take a signed 10 bit immediate.
1643-
case Mips::BI__builtin_msa_ldi_b: i = 0; l = -128; u = 127; break;
1643+
case Mips::BI__builtin_msa_ldi_b: i = 0; l = -128; u = 255; break;
16441644
case Mips::BI__builtin_msa_ldi_h:
16451645
case Mips::BI__builtin_msa_ldi_w:
16461646
case Mips::BI__builtin_msa_ldi_d: i = 0; l = -512; u = 511; break;

test/CodeGen/builtins-mips-msa-error.c

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -119,7 +119,7 @@ void test(void) {
119119
v4i32_r = __msa_ld_w(&v4i32_a, 512); // expected-error {{argument should be a value from -512 to 511}}
120120
v2i64_r = __msa_ld_d(&v2i64_a, 512); // expected-error {{argument should be a value from -512 to 511}}
121121

122-
v16i8_r = __msa_ldi_b(512); // expected-error {{argument should be a value from -512 to 511}}
122+
v16i8_r = __msa_ldi_b(256); // expected-error {{argument should be a value from -128 to 255}}
123123
v8i16_r = __msa_ldi_h(512); // expected-error {{argument should be a value from -512 to 511}}
124124
v4i32_r = __msa_ldi_w(512); // expected-error {{argument should be a value from -512 to 511}}
125125
v2i64_r = __msa_ldi_d(512); // expected-error {{argument should be a value from -512 to 511}}
@@ -310,7 +310,7 @@ void test(void) {
310310
v4i32_r = __msa_ld_w(&v4i32_a, -513); // expected-error {{argument should be a value from -512 to 511}}
311311
v2i64_r = __msa_ld_d(&v2i64_a, -513); // expected-error {{argument should be a value from -512 to 511}}
312312

313-
v16i8_r = __msa_ldi_b(-513); // expected-error {{argument should be a value from -512 to 511}}
313+
v16i8_r = __msa_ldi_b(-129); // expected-error {{argument should be a value from -128 to 255}}
314314
v8i16_r = __msa_ldi_h(-513); // expected-error {{argument should be a value from -512 to 511}}
315315
v4i32_r = __msa_ldi_w(-513); // expected-error {{argument should be a value from -512 to 511}}
316316
v2i64_r = __msa_ldi_d(-513); // expected-error {{argument should be a value from -512 to 511}}

test/CodeGen/builtins-mips-msa.c

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -526,6 +526,8 @@ void test(void) {
526526
v2i64_r = __msa_ld_d(&v2i64_a, 96); // CHECK: call <2 x i64> @llvm.mips.ld.d(
527527

528528
v16i8_r = __msa_ldi_b(3); // CHECK: call <16 x i8> @llvm.mips.ldi.b(
529+
v16i8_r = __msa_ldi_b(-128); // CHECK: call <16 x i8> @llvm.mips.ldi.b(
530+
v16i8_r = __msa_ldi_b(255); // CHECK: call <16 x i8> @llvm.mips.ldi.b(
529531
v8i16_r = __msa_ldi_h(3); // CHECK: call <8 x i16> @llvm.mips.ldi.h(
530532
v4i32_r = __msa_ldi_w(3); // CHECK: call <4 x i32> @llvm.mips.ldi.w(
531533
v2i64_r = __msa_ldi_d(3); // CHECK: call <2 x i64> @llvm.mips.ldi.d(

0 commit comments

Comments
 (0)