Skip to content

Commit 5f0fc8d

Browse files
authored
Merge pull request #451 from ThePortlandGroup/nv_stage
Pull 2018-04-24T17-21 Recent NVIDIA Changes
2 parents 2f4d2cf + ff466ea commit 5f0fc8d

File tree

4 files changed

+39
-18
lines changed

4 files changed

+39
-18
lines changed

tools/flang1/flang1exe/lowersym.c

Lines changed: 21 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -1858,7 +1858,7 @@ makefvallocal(int rutype, int fval)
18581858
{
18591859
int dtype;
18601860
/* if this was turned into a subroutine, make the fval a dummy */
1861-
if (gbl.rutype != RU_FUNC)
1861+
if (rutype != RU_FUNC)
18621862
return 0;
18631863
/* if the fval is a POINTER variable, make local */
18641864
if (POINTERG(fval))
@@ -5263,34 +5263,41 @@ static int save_dpdsc_cnt = 0;
52635263
static void
52645264
llvm_check_retval_inargs(int sptr)
52655265
{
5266-
if (FVALG(sptr)) {
5266+
int fval = FVALG(sptr);
5267+
if (fval) {
52675268
int dtype;
52685269
int ent_dtype = DTYPEG(sptr);
52695270
llvm_fix_args(sptr, dtype != DT_NONE);
5270-
dtype = DTYPEG(FVALG(sptr));
5271+
dtype = DTYPEG(fval);
52715272
fix_class_args(sptr);
5273+
if (DTYPEG(sptr) != DT_NONE && makefvallocal(RU_FUNC, fval)) {
5274+
SCP(fval, SC_LOCAL);
5275+
if (is_iso_cptr(DTYPEG(fval))) {
5276+
DTYPEP(fval, DT_CPTR);
5277+
}
5278+
}
52725279
switch (DTY(dtype)) {
52735280
case TY_ARRAY:
5274-
if (aux.dpdsc_base[DPDSCG(sptr)] != FVALG(sptr)) {
5281+
if (aux.dpdsc_base[DPDSCG(sptr)] != fval) {
52755282
DPDSCP(sptr, DPDSCG(sptr) - 1);
5276-
*(aux.dpdsc_base + DPDSCG(sptr)) = FVALG(sptr);
5283+
*(aux.dpdsc_base + DPDSCG(sptr)) = fval;
52775284
PARAMCTP(sptr, PARAMCTG(sptr) + 1);
52785285
DTYPEP(sptr, DT_NONE);
5279-
SCP(FVALG(sptr), SC_DUMMY);
5286+
SCP(fval, SC_DUMMY);
52805287
}
52815288
break;
52825289
case TY_CHAR:
52835290
case TY_NCHAR:
52845291
if (dtype != ent_dtype)
52855292
return;
5286-
if (!POINTERG(sptr) && ADJLENG(FVALG(sptr)) && DPDSCG(sptr)) {
5293+
if (!POINTERG(sptr) && ADJLENG(fval) && DPDSCG(sptr)) {
52875294

5288-
if (aux.dpdsc_base[DPDSCG(sptr)] != FVALG(sptr)) {
5295+
if (aux.dpdsc_base[DPDSCG(sptr)] != fval) {
52895296
DPDSCP(sptr, DPDSCG(sptr) - 1);
5290-
*(aux.dpdsc_base + DPDSCG(sptr)) = FVALG(sptr);
5297+
*(aux.dpdsc_base + DPDSCG(sptr)) = fval;
52915298
PARAMCTP(sptr, PARAMCTG(sptr) + 1);
52925299
DTYPEP(sptr, DT_NONE);
5293-
SCP(FVALG(sptr), SC_DUMMY);
5300+
SCP(fval, SC_DUMMY);
52945301
}
52955302
}
52965303
case TY_DCMPLX:
@@ -5305,18 +5312,18 @@ llvm_check_retval_inargs(int sptr)
53055312
return;
53065313

53075314
pointer_check:
5308-
if (aux.dpdsc_base[DPDSCG(sptr)] != FVALG(sptr) &&
5309-
(POINTERG(sptr) || ALLOCATTRG(FVALG(sptr)) ||
5315+
if (aux.dpdsc_base[DPDSCG(sptr)] != fval &&
5316+
(POINTERG(sptr) || ALLOCATTRG(fval) ||
53105317
(DTY(ent_dtype) == TY_DCMPLX))
53115318

53125319
) {
53135320
if (DPDSCG(sptr) && DTYPEG(sptr) != DT_NONE) {
53145321

53155322
DPDSCP(sptr, DPDSCG(sptr) - 1);
5316-
*(aux.dpdsc_base + DPDSCG(sptr)) = FVALG(sptr);
5323+
*(aux.dpdsc_base + DPDSCG(sptr)) = fval;
53175324
PARAMCTP(sptr, PARAMCTG(sptr) + 1);
53185325
DTYPEP(sptr, DT_NONE);
5319-
SCP(FVALG(sptr), SC_DUMMY);
5326+
SCP(fval, SC_DUMMY);
53205327
}
53215328
}
53225329
break;

tools/flang1/flang1exe/semsmp.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8329,7 +8329,7 @@ restore_clauses(void)
83298329
if (chunk) {
83308330
sptr = sav_chk.chunk;
83318331
chunk = mk_id(sptr);
8332-
set_parref_flag(chunk, chunk, BLK_UPLEVEL_SPTR(sem.scope_level));
8332+
set_parref_flag(sptr, sptr, BLK_UPLEVEL_SPTR(sem.scope_level));
83338333
}
83348334
}
83358335
break;

tools/flang1/flang1exe/semutil2.c

Lines changed: 13 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -6850,7 +6850,12 @@ dinit_fill_struct(ASTLIST *list, ACL *aclp, int sdtype, int sptr,
68506850
A_SPTRP(aa, sptr);
68516851
add_init(list, aast, dtype, sptr);
68526852
} else {
6853-
aast = dinit_getval1(aast, sdtype);
6853+
if (DTY(sdtype) == TY_ARRAY) {
6854+
aast = dinit_getval1(aast, DTY(sdtype+1));
6855+
}
6856+
else
6857+
aast = dinit_getval1(aast, sdtype);
6858+
68546859
if (A_TYPEG(SST_ASTG(stkp)) == A_CNST &&
68556860
A_DTYPEG(aast) != A_DTYPEG(SST_ASTG(stkp))) {
68566861
/* constant initialization value needed type conversion,
@@ -6898,8 +6903,13 @@ dinit_fill_struct(ASTLIST *list, ACL *aclp, int sdtype, int sptr,
68986903
b = dinit_fill_struct(&newlist, a->subc, ddtype, sptr, 0, FALSE);
68996904
if (list && DTY(sdtype) != TY_ARRAY)
69006905
append_init_list(list, &newlist);
6901-
else
6902-
add_init(list, newlist.head, dtype, sptr);
6906+
else {
6907+
if (DTY(ddtype) == TY_DERIVED) {
6908+
add_init(list, newlist.head, ddtype, sptr);
6909+
}
6910+
else
6911+
add_init(list, newlist.head, dtype, sptr);
6912+
}
69036913
break;
69046914
case AC_SCONST:
69056915
dtype = a->dtype;

tools/flang2/flang2exe/verify.c

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -181,6 +181,10 @@ is_known_bug(ILI_OP opc, int j, ILI_OP j_opc)
181181
return true;
182182
if (opc == IL_PI8MV_LOW && o == ILIO_KRLNK && r == ILIA_AR)
183183
return true;
184+
#ifdef IL_PI8BROADCAST
185+
if (opc == IL_PI8BROADCAST && o == ILIO_KRLNK && r == ILIA_AR)
186+
return true;
187+
#endif
184188
if (opc == IL_IMUL && o == ILIO_IRLNK && j_opc == IL_KCON)
185189
return true;
186190
if (opc == IL_IKMV && o == ILIO_IRLNK && j_opc == IL_KCON)

0 commit comments

Comments
 (0)