public inbox for jit@gcc.gnu.org
 help / color / mirror / Atom feed
From: Dibyendu Majumdar <mobile@majumdar.org.uk>
To: jit@gcc.gnu.org
Subject: Re: A possible code generation issue
Date: Thu, 01 Jan 2015 00:00:00 -0000	[thread overview]
Message-ID: <CACXZuxfKRkEzSjzPCvpSvL0EcryEofyL-xjgJLxByNQDNpBjTg@mail.gmail.com> (raw)
In-Reply-To: <CACXZuxc3z92zKFWhNBU4a0LDxhyNRiZcbMf83HVYkOn-7CScDQ@mail.gmail.com>

[-- Attachment #1: Type: text/plain, Size: 809 bytes --]

Also attached are the initial gimples .

Looks like in the failure case the code is being incorrectly
optimized. I wonder if this is a manifestation of the get_address bug,
perhaps the real fix will be better than the patch I am using. I will
use the latest gcc 5 branch and see if that helps.

Regards

> I am getting a failure in one of the Lua tests. Attached are two dumps:
>
> 1. bug_fdump.txt and bug_rdump.txt - these are the versions that fail.
>
>
> 2. The bug_fdump_ok.txt and bug_rdump_ok.txt - this runs ok. The only
> difference between this version and the above is a debug printf call
> in this; so the printf call somehow seems to alter the code being
> generated.
>
> I have also attached the corresponding asm files.
>
>
> I am still using my patched version - not the latest from 5 branch.

[-- Attachment #2: bug_asm.txt --]
[-- Type: text/plain, Size: 7987 bytes --]

ravif2 (struct ravi_lua_State * L)
{
  struct ravi_CallInfo * D.1181;
  struct ravi_TValue * D.1182;
  sizetype D.1183;
  struct ravi_TValue * D.1184;
  struct ravi_Proto * D.1185;
  struct ravi_TValue * D.1186;
  sizetype D.1187;
  struct ravi_TValue * D.1188;
  signed long D.1189;
  signed int D.1190;
  signed int D.1191;
  signed int D.1192;
  <unnamed type> iftmp.3;
  <unnamed type> iftmp.4;
  <unnamed type> iftmp.5;
  <unnamed type> iftmp.6;
  <unnamed type> D.1213;
  signed int D.1214;
  <unnamed type> iftmp.7;
  <unnamed type> iftmp.8;
  sizetype D.1225;
  struct ravi_TValue * D.1226;
  signed int D.1227;
  struct ravi_TValue * D.1228;
  signed int D.1229;
  <unnamed type> comparison_0_26;
  <unnamed type> comparison_0_22;
  <unnamed type> comparison_0_19;
  <unnamed type> comparison_0_18;
  <unnamed type> comparison_0_17;
  <unnamed type> isfalse_0_16;
  <unnamed type> comparison_0_13;
  <unnamed type> comparison_0_12;
  <unnamed type> comparison_0_11;
  <unnamed type> isfalse_0_10;
  <unnamed type> comparison_0_7;
  <unnamed type> comparison_0_6;
  <unnamed type> comparison_0_5;
  <unnamed type> isfalse_0_4;
  struct ravi_LClosure * cl;
  struct ravi_TValue * base;

  entry:
  D.1181 = L->ci;
  D.1182 = D.1181->func;
  cl = D.1182->value_.gc;
  D.1181 = L->ci;
  base = D.1181->u.l.base;
  D.1181 = L->ci;
  raviV_op_loadnil (D.1181, 0, 0);
  D.1181 = L->ci;
  base = D.1181->u.l.base;
  D.1183 = 16;
  D.1184 = base + D.1183;
  D.1185 = cl->p;
  D.1186 = D.1185->k;
  D.1187 = 0;
  D.1188 = D.1186 + D.1187;
  D.1189 = D.1188->value_.i;
  D.1184->value_.i = D.1189;
  D.1183 = 16;
  D.1184 = base + D.1183;
  D.1185 = cl->p;
  D.1186 = D.1185->k;
  D.1187 = 0;
  D.1188 = D.1186 + D.1187;
  D.1190 = D.1188->tt_;
  D.1184->tt_ = D.1190;
  D.1181 = L->ci;
  base = D.1181->u.l.base;
  D.1183 = 16;
  D.1184 = base + D.1183;
  D.1191 = D.1184->tt_;
  comparison_0_5 = D.1191 == 0;
  D.1183 = 16;
  D.1184 = base + D.1183;
  D.1191 = D.1184->tt_;
  comparison_0_6 = D.1191 == 1;
  D.1183 = 16;
  D.1184 = base + D.1183;
  D.1192 = D.1184->value_.b;
  comparison_0_7 = D.1192 == 0;
  if (comparison_0_5 != 0) goto <D.1194>; else goto <D.1197>;
  <D.1197>:
  if (comparison_0_6 != 0) goto <D.1201>; else goto <D.1199>;
  <D.1201>:
  if (comparison_0_7 != 0) goto <D.1202>; else goto <D.1199>;
  <D.1202>:
  iftmp.4 = 1;
  goto <D.1200>;
  <D.1199>:
  iftmp.4 = 0;
  <D.1200>:
  if (iftmp.4 != 0) goto <D.1194>; else goto <D.1195>;
  <D.1194>:
  iftmp.3 = 1;
  goto <D.1196>;
  <D.1195>:
  iftmp.3 = 0;
  <D.1196>:
  isfalse_0_4 = iftmp.3;
  if (isfalse_0_4 == 0) goto OP_TEST_do_jmp_2_8; else goto OP_TEST_do_skip_2_9;
  jmp_5_1:
  D.1181 = L->ci;
  base = D.1181->u.l.base;
  D.1183 = 16;
  D.1184 = base + D.1183;
  D.1184->value_.b = 0;
  D.1183 = 16;
  D.1184 = base + D.1183;
  D.1184->tt_ = 1;
  D.1181 = L->ci;
  base = D.1181->u.l.base;
  D.1183 = 16;
  D.1184 = base + D.1183;
  D.1191 = D.1184->tt_;
  comparison_0_11 = D.1191 == 0;
  D.1183 = 16;
  D.1184 = base + D.1183;
  D.1191 = D.1184->tt_;
  comparison_0_12 = D.1191 == 1;
  D.1183 = 16;
  D.1184 = base + D.1183;
  D.1192 = D.1184->value_.b;
  comparison_0_13 = D.1192 == 0;
  if (comparison_0_11 != 0) goto <D.1204>; else goto <D.1207>;
  <D.1207>:
  if (comparison_0_12 != 0) goto <D.1211>; else goto <D.1209>;
  <D.1211>:
  if (comparison_0_13 != 0) goto <D.1212>; else goto <D.1209>;
  <D.1212>:
  iftmp.6 = 1;
  goto <D.1210>;
  <D.1209>:
  iftmp.6 = 0;
  <D.1210>:
  if (iftmp.6 != 0) goto <D.1204>; else goto <D.1205>;
  <D.1204>:
  iftmp.5 = 1;
  goto <D.1206>;
  <D.1205>:
  iftmp.5 = 0;
  <D.1206>:
  isfalse_0_10 = iftmp.5;
  D.1213 = ~isfalse_0_10;
  D.1214 = (signed int) D.1213;
  if (D.1214 == 0) goto OP_TEST_do_jmp_5_14; else goto OP_TEST_do_skip_5_15;
  jmp_9_2:
  D.1181 = L->ci;
  base = D.1181->u.l.base;
  D.1183 = 16;
  D.1184 = base + D.1183;
  D.1185 = cl->p;
  D.1186 = D.1185->k;
  D.1187 = 0;
  D.1188 = D.1186 + D.1187;
  D.1189 = D.1188->value_.i;
  D.1184->value_.i = D.1189;
  D.1183 = 16;
  D.1184 = base + D.1183;
  D.1185 = cl->p;
  D.1186 = D.1185->k;
  D.1187 = 0;
  D.1188 = D.1186 + D.1187;
  D.1190 = D.1188->tt_;
  D.1184->tt_ = D.1190;
  D.1181 = L->ci;
  base = D.1181->u.l.base;
  D.1183 = 16;
  D.1184 = base + D.1183;
  D.1191 = D.1184->tt_;
  comparison_0_17 = D.1191 == 0;
  D.1183 = 16;
  D.1184 = base + D.1183;
  D.1191 = D.1184->tt_;
  comparison_0_18 = D.1191 == 1;
  D.1183 = 16;
  D.1184 = base + D.1183;
  D.1192 = D.1184->value_.b;
  comparison_0_19 = D.1192 == 0;
  if (comparison_0_17 != 0) goto <D.1216>; else goto <D.1219>;
  <D.1219>:
  if (comparison_0_18 != 0) goto <D.1223>; else goto <D.1221>;
  <D.1223>:
  if (comparison_0_19 != 0) goto <D.1224>; else goto <D.1221>;
  <D.1224>:
  iftmp.8 = 1;
  goto <D.1222>;
  <D.1221>:
  iftmp.8 = 0;
  <D.1222>:
  if (iftmp.8 != 0) goto <D.1216>; else goto <D.1217>;
  <D.1216>:
  iftmp.7 = 1;
  goto <D.1218>;
  <D.1217>:
  iftmp.7 = 0;
  <D.1218>:
  isfalse_0_16 = iftmp.7;
  if (isfalse_0_16 == 0) goto OP_TEST_do_jmp_9_20; else goto OP_TEST_do_skip_9_21;
  jmp_12_3:
  D.1181 = L->ci;
  base = D.1181->u.l.base;
  D.1183 = 16;
  D.1184 = base + D.1183;
  D.1184->value_.b = 0;
  D.1183 = 16;
  D.1184 = base + D.1183;
  D.1184->tt_ = 1;
  D.1181 = L->ci;
  base = D.1181->u.l.base;
  D.1225 = 32;
  D.1226 = base + D.1225;
  L->top = D.1226;
  D.1185 = cl->p;
  D.1227 = D.1185->sizep;
  comparison_0_22 = D.1227 > 0;
  if (comparison_0_22 != 0) goto OP_RETURN_if_sizep_gt_0_12_23; else goto OP_RETURN_else_sizep_gt_0_12_24;
  OP_TEST_do_jmp_2_8:
  goto jmp_5_1;
  OP_TEST_do_skip_2_9:
  goto jmp_5_1;
  OP_TEST_do_jmp_5_14:
  goto jmp_9_2;
  OP_TEST_do_skip_5_15:
  D.1181 = L->ci;
  base = D.1181->u.l.base;
  D.1187 = 0;
  D.1228 = base + D.1187;
  D.1228->value_.b = 1;
  D.1187 = 0;
  D.1228 = base + D.1187;
  D.1228->tt_ = 1;
  goto jmp_9_2;
  OP_TEST_do_jmp_9_20:
  goto jmp_12_3;
  OP_TEST_do_skip_9_21:
  goto jmp_12_3;
  OP_RETURN_if_sizep_gt_0_12_23:
  luaF_close (L, base);
  goto OP_RETURN_else_sizep_gt_0_12_24;
  OP_RETURN_else_sizep_gt_0_12_24:
  D.1183 = 16;
  D.1184 = base + D.1183;
  luaD_poscall (L, D.1184);
  D.1229 = 1;
  return D.1229;
  OP_RETURN_13_25:
  D.1181 = L->ci;
  base = D.1181->u.l.base;
  D.1187 = 0;
  D.1228 = base + D.1187;
  L->top = D.1228;
  D.1185 = cl->p;
  D.1227 = D.1185->sizep;
  comparison_0_26 = D.1227 > 0;
  if (comparison_0_26 != 0) goto OP_RETURN_if_sizep_gt_0_13_27; else goto OP_RETURN_else_sizep_gt_0_13_28;
  OP_RETURN_if_sizep_gt_0_13_27:
  luaF_close (L, base);
  goto OP_RETURN_else_sizep_gt_0_13_28;
  OP_RETURN_else_sizep_gt_0_13_28:
  D.1187 = 0;
  D.1228 = base + D.1187;
  luaD_poscall (L, D.1228);
  D.1229 = 1;
  return D.1229;
}


	.file	"fake.c"
	.section	.text.unlikely,"ax",@progbits
.LCOLDB1:
	.text
.LHOTB1:
	.p2align 4,,15
	.globl	ravif2
	.type	ravif2, @function
ravif2:
.LFB1:
	.cfi_startproc
.L35:
	pushq	%r12
	.cfi_def_cfa_offset 16
	.cfi_offset 12, -16
	xorl	%edx, %edx
	xorl	%esi, %esi
	pushq	%rbp
	.cfi_def_cfa_offset 24
	.cfi_offset 6, -24
	movq	%rdi, %rbp
	pushq	%rbx
	.cfi_def_cfa_offset 32
	.cfi_offset 3, -32
	movq	32(%rdi), %rdi
	movq	(%rdi), %rax
	movq	(%rax), %r12
	call	raviV_op_loadnil@PLT
	movq	32(%rbp), %rax
	movq	32(%rax), %rbx
	movq	24(%r12), %rax
	movq	48(%rax), %rdx
	movl	32(%rax), %eax
	movq	(%rdx), %rcx
	movl	$1, 24(%rbx)
	movq	%rcx, 16(%rbx)
	movq	(%rdx), %rdx
	movq	%rdx, 16(%rbx)
	leaq	32(%rbx), %rdx
	movq	%rdx, 16(%rbp)
	testl	%eax, %eax
	jle	.L36
.L37:
	movq	%rbx, %rsi
	movq	%rbp, %rdi
	call	luaF_close@PLT
.L36:
	leaq	16(%rbx), %rsi
	movq	%rbp, %rdi
	call	luaD_poscall@PLT
	popq	%rbx
	.cfi_def_cfa_offset 24
	movl	$1, %eax
	popq	%rbp
	.cfi_def_cfa_offset 16
	popq	%r12
	.cfi_def_cfa_offset 8
	ret
	.cfi_endproc
.LFE1:
	.size	ravif2, .-ravif2
	.section	.text.unlikely
.LCOLDE1:
	.text
.LHOTE1:
	.ident	"GCC: (GNU) 5.1.0"
	.section	.note.GNU-stack,"",@progbits
../build/lua: assertion failed!
stack traceback:
	[C]: in function 'assert'
	bug.lua: in main chunk
	[C]: in ?

[-- Attachment #3: bug_asm_ok.txt --]
[-- Type: text/plain, Size: 9277 bytes --]

ravif2 (struct ravi_lua_State * L)
{
  struct ravi_CallInfo * D.1181;
  struct ravi_TValue * D.1182;
  sizetype D.1183;
  struct ravi_TValue * D.1184;
  struct ravi_Proto * D.1185;
  struct ravi_TValue * D.1186;
  sizetype D.1187;
  struct ravi_TValue * D.1188;
  signed long D.1189;
  signed int D.1190;
  signed int D.1191;
  signed int D.1192;
  <unnamed type> iftmp.3;
  <unnamed type> iftmp.4;
  <unnamed type> iftmp.5;
  <unnamed type> iftmp.6;
  <unnamed type> D.1213;
  signed int D.1214;
  <unnamed type> iftmp.7;
  <unnamed type> iftmp.8;
  sizetype D.1225;
  struct ravi_TValue * D.1226;
  signed int D.1227;
  struct ravi_TValue * D.1228;
  signed int D.1229;
  <unnamed type> comparison_0_26;
  <unnamed type> comparison_0_22;
  <unnamed type> comparison_0_19;
  <unnamed type> comparison_0_18;
  <unnamed type> comparison_0_17;
  <unnamed type> isfalse_0_16;
  <unnamed type> comparison_0_13;
  <unnamed type> comparison_0_12;
  <unnamed type> comparison_0_11;
  <unnamed type> isfalse_0_10;
  <unnamed type> comparison_0_7;
  <unnamed type> comparison_0_6;
  <unnamed type> comparison_0_5;
  <unnamed type> isfalse_0_4;
  struct ravi_LClosure * cl;
  struct ravi_TValue * base;

  entry:
  D.1181 = L->ci;
  D.1182 = D.1181->func;
  cl = D.1182->value_.gc;
  D.1181 = L->ci;
  base = D.1181->u.l.base;
  D.1181 = L->ci;
  raviV_op_loadnil (D.1181, 0, 0);
  D.1181 = L->ci;
  base = D.1181->u.l.base;
  D.1183 = 16;
  D.1184 = base + D.1183;
  D.1185 = cl->p;
  D.1186 = D.1185->k;
  D.1187 = 0;
  D.1188 = D.1186 + D.1187;
  D.1189 = D.1188->value_.i;
  D.1184->value_.i = D.1189;
  D.1183 = 16;
  D.1184 = base + D.1183;
  D.1185 = cl->p;
  D.1186 = D.1185->k;
  D.1187 = 0;
  D.1188 = D.1186 + D.1187;
  D.1190 = D.1188->tt_;
  D.1184->tt_ = D.1190;
  printf ("OP_TEST(%d C=1)) if (!reg(A=%d)) then skip next else jmp to %d\n", 3, 1, 5);
  D.1181 = L->ci;
  base = D.1181->u.l.base;
  D.1183 = 16;
  D.1184 = base + D.1183;
  D.1191 = D.1184->tt_;
  comparison_0_5 = D.1191 == 0;
  D.1183 = 16;
  D.1184 = base + D.1183;
  D.1191 = D.1184->tt_;
  comparison_0_6 = D.1191 == 1;
  D.1183 = 16;
  D.1184 = base + D.1183;
  D.1192 = D.1184->value_.b;
  comparison_0_7 = D.1192 == 0;
  if (comparison_0_5 != 0) goto <D.1194>; else goto <D.1197>;
  <D.1197>:
  if (comparison_0_6 != 0) goto <D.1201>; else goto <D.1199>;
  <D.1201>:
  if (comparison_0_7 != 0) goto <D.1202>; else goto <D.1199>;
  <D.1202>:
  iftmp.4 = 1;
  goto <D.1200>;
  <D.1199>:
  iftmp.4 = 0;
  <D.1200>:
  if (iftmp.4 != 0) goto <D.1194>; else goto <D.1195>;
  <D.1194>:
  iftmp.3 = 1;
  goto <D.1196>;
  <D.1195>:
  iftmp.3 = 0;
  <D.1196>:
  isfalse_0_4 = iftmp.3;
  if (isfalse_0_4 == 0) goto OP_TEST_do_jmp_2_8; else goto OP_TEST_do_skip_2_9;
  jmp_5_1:
  D.1181 = L->ci;
  base = D.1181->u.l.base;
  D.1183 = 16;
  D.1184 = base + D.1183;
  D.1184->value_.b = 0;
  D.1183 = 16;
  D.1184 = base + D.1183;
  D.1184->tt_ = 1;
  printf ("OP_TEST(%d C=0) if (reg(A=%d)) then skip next else jmp to %d\n", 6, 1, 9);
  D.1181 = L->ci;
  base = D.1181->u.l.base;
  D.1183 = 16;
  D.1184 = base + D.1183;
  D.1191 = D.1184->tt_;
  comparison_0_11 = D.1191 == 0;
  D.1183 = 16;
  D.1184 = base + D.1183;
  D.1191 = D.1184->tt_;
  comparison_0_12 = D.1191 == 1;
  D.1183 = 16;
  D.1184 = base + D.1183;
  D.1192 = D.1184->value_.b;
  comparison_0_13 = D.1192 == 0;
  if (comparison_0_11 != 0) goto <D.1204>; else goto <D.1207>;
  <D.1207>:
  if (comparison_0_12 != 0) goto <D.1211>; else goto <D.1209>;
  <D.1211>:
  if (comparison_0_13 != 0) goto <D.1212>; else goto <D.1209>;
  <D.1212>:
  iftmp.6 = 1;
  goto <D.1210>;
  <D.1209>:
  iftmp.6 = 0;
  <D.1210>:
  if (iftmp.6 != 0) goto <D.1204>; else goto <D.1205>;
  <D.1204>:
  iftmp.5 = 1;
  goto <D.1206>;
  <D.1205>:
  iftmp.5 = 0;
  <D.1206>:
  isfalse_0_10 = iftmp.5;
  D.1213 = ~isfalse_0_10;
  D.1214 = (signed int) D.1213;
  if (D.1214 == 0) goto OP_TEST_do_jmp_5_14; else goto OP_TEST_do_skip_5_15;
  jmp_9_2:
  D.1181 = L->ci;
  base = D.1181->u.l.base;
  D.1183 = 16;
  D.1184 = base + D.1183;
  D.1185 = cl->p;
  D.1186 = D.1185->k;
  D.1187 = 0;
  D.1188 = D.1186 + D.1187;
  D.1189 = D.1188->value_.i;
  D.1184->value_.i = D.1189;
  D.1183 = 16;
  D.1184 = base + D.1183;
  D.1185 = cl->p;
  D.1186 = D.1185->k;
  D.1187 = 0;
  D.1188 = D.1186 + D.1187;
  D.1190 = D.1188->tt_;
  D.1184->tt_ = D.1190;
  printf ("OP_TEST(%d C=1)) if (!reg(A=%d)) then skip next else jmp to %d\n", 10, 1, 12);
  D.1181 = L->ci;
  base = D.1181->u.l.base;
  D.1183 = 16;
  D.1184 = base + D.1183;
  D.1191 = D.1184->tt_;
  comparison_0_17 = D.1191 == 0;
  D.1183 = 16;
  D.1184 = base + D.1183;
  D.1191 = D.1184->tt_;
  comparison_0_18 = D.1191 == 1;
  D.1183 = 16;
  D.1184 = base + D.1183;
  D.1192 = D.1184->value_.b;
  comparison_0_19 = D.1192 == 0;
  if (comparison_0_17 != 0) goto <D.1216>; else goto <D.1219>;
  <D.1219>:
  if (comparison_0_18 != 0) goto <D.1223>; else goto <D.1221>;
  <D.1223>:
  if (comparison_0_19 != 0) goto <D.1224>; else goto <D.1221>;
  <D.1224>:
  iftmp.8 = 1;
  goto <D.1222>;
  <D.1221>:
  iftmp.8 = 0;
  <D.1222>:
  if (iftmp.8 != 0) goto <D.1216>; else goto <D.1217>;
  <D.1216>:
  iftmp.7 = 1;
  goto <D.1218>;
  <D.1217>:
  iftmp.7 = 0;
  <D.1218>:
  isfalse_0_16 = iftmp.7;
  if (isfalse_0_16 == 0) goto OP_TEST_do_jmp_9_20; else goto OP_TEST_do_skip_9_21;
  jmp_12_3:
  D.1181 = L->ci;
  base = D.1181->u.l.base;
  D.1183 = 16;
  D.1184 = base + D.1183;
  D.1184->value_.b = 0;
  D.1183 = 16;
  D.1184 = base + D.1183;
  D.1184->tt_ = 1;
  D.1181 = L->ci;
  base = D.1181->u.l.base;
  D.1225 = 32;
  D.1226 = base + D.1225;
  L->top = D.1226;
  D.1185 = cl->p;
  D.1227 = D.1185->sizep;
  comparison_0_22 = D.1227 > 0;
  if (comparison_0_22 != 0) goto OP_RETURN_if_sizep_gt_0_12_23; else goto OP_RETURN_else_sizep_gt_0_12_24;
  OP_TEST_do_jmp_2_8:
  goto jmp_5_1;
  OP_TEST_do_skip_2_9:
  goto jmp_5_1;
  OP_TEST_do_jmp_5_14:
  goto jmp_9_2;
  OP_TEST_do_skip_5_15:
  D.1181 = L->ci;
  base = D.1181->u.l.base;
  D.1187 = 0;
  D.1228 = base + D.1187;
  D.1228->value_.b = 1;
  D.1187 = 0;
  D.1228 = base + D.1187;
  D.1228->tt_ = 1;
  goto jmp_9_2;
  OP_TEST_do_jmp_9_20:
  goto jmp_12_3;
  OP_TEST_do_skip_9_21:
  goto jmp_12_3;
  OP_RETURN_if_sizep_gt_0_12_23:
  luaF_close (L, base);
  goto OP_RETURN_else_sizep_gt_0_12_24;
  OP_RETURN_else_sizep_gt_0_12_24:
  D.1183 = 16;
  D.1184 = base + D.1183;
  luaD_poscall (L, D.1184);
  D.1229 = 1;
  return D.1229;
  OP_RETURN_13_25:
  D.1181 = L->ci;
  base = D.1181->u.l.base;
  D.1187 = 0;
  D.1228 = base + D.1187;
  L->top = D.1228;
  D.1185 = cl->p;
  D.1227 = D.1185->sizep;
  comparison_0_26 = D.1227 > 0;
  if (comparison_0_26 != 0) goto OP_RETURN_if_sizep_gt_0_13_27; else goto OP_RETURN_else_sizep_gt_0_13_28;
  OP_RETURN_if_sizep_gt_0_13_27:
  luaF_close (L, base);
  goto OP_RETURN_else_sizep_gt_0_13_28;
  OP_RETURN_else_sizep_gt_0_13_28:
  D.1187 = 0;
  D.1228 = base + D.1187;
  luaD_poscall (L, D.1228);
  D.1229 = 1;
  return D.1229;
}


	.file	"fake.c"
	.section	.rodata
	.align 8
.LC1:
	.ascii	"OP_TEST(%d C=1)) if (!reg(A=%d)) then skip next else jmp to "
	.ascii	"%d\n"
	.zero	138
	.align 8
.LC2:
	.ascii	"OP_TEST(%d C=0) if (reg(A=%d)) then skip next else jmp to %d"
	.ascii	"\n"
	.zero	140
	.section	.text.unlikely,"ax",@progbits
.LCOLDB3:
	.text
.LHOTB3:
	.p2align 4,,15
	.globl	ravif2
	.type	ravif2, @function
ravif2:
.LFB1:
	.cfi_startproc
.L35:
	pushq	%r12
	.cfi_def_cfa_offset 16
	.cfi_offset 12, -16
	xorl	%edx, %edx
	xorl	%esi, %esi
	pushq	%rbp
	.cfi_def_cfa_offset 24
	.cfi_offset 6, -24
	pushq	%rbx
	.cfi_def_cfa_offset 32
	.cfi_offset 3, -32
	movq	%rdi, %rbx
	movq	32(%rdi), %rdi
	movq	(%rdi), %rax
	movq	(%rax), %r12
	call	raviV_op_loadnil@PLT
	movq	32(%rbx), %rax
	movl	$3, %esi
	leaq	.LC1(%rip), %rdi
	movq	24(%r12), %rdx
	movq	32(%rax), %rax
	movq	48(%rdx), %rdx
	movq	(%rdx), %rcx
	movl	8(%rdx), %edx
	movq	%rcx, 16(%rax)
	movl	$5, %ecx
	movl	%edx, 24(%rax)
	movl	$1, %edx
	xorl	%eax, %eax
	call	printf@PLT
	movq	32(%rbx), %rax
	movl	$1, %edx
	movl	$9, %ecx
	leaq	.LC2(%rip), %rdi
	movl	$6, %esi
	movq	32(%rax), %rax
	movl	$0, 16(%rax)
	movl	$1, 24(%rax)
	xorl	%eax, %eax
	call	printf@PLT
	movq	32(%rbx), %rax
	movq	32(%rax), %rax
	movl	24(%rax), %edx
	testl	%edx, %edx
	je	.L38
	movl	16(%rax), %ecx
	testl	%ecx, %ecx
	je	.L51
.L37:
	movl	$1, (%rax)
	movl	$1, 8(%rax)
.L36:
.L38:
	movq	24(%r12), %rdx
	movl	$10, %esi
	leaq	.LC1(%rip), %rdi
	movq	48(%rdx), %rdx
	movq	(%rdx), %rcx
	movl	8(%rdx), %edx
	movq	%rcx, 16(%rax)
	movl	$12, %ecx
	movl	%edx, 24(%rax)
	movl	$1, %edx
	xorl	%eax, %eax
	call	printf@PLT
	movq	32(%rbx), %rax
	movq	32(%rax), %rbp
	leaq	32(%rbp), %rax
	movl	$0, 16(%rbp)
	movl	$1, 24(%rbp)
	movq	%rax, 16(%rbx)
	movq	24(%r12), %rax
	movl	32(%rax), %eax
	testl	%eax, %eax
	jle	.L40
.L39:
	movq	%rbp, %rsi
	movq	%rbx, %rdi
	call	luaF_close@PLT
.L40:
	leaq	16(%rbp), %rsi
	movq	%rbx, %rdi
	call	luaD_poscall@PLT
	popq	%rbx
	.cfi_remember_state
	.cfi_def_cfa_offset 24
	movl	$1, %eax
	popq	%rbp
	.cfi_def_cfa_offset 16
	popq	%r12
	.cfi_def_cfa_offset 8
	ret
	.p2align 4,,10
	.p2align 3
.L51:
	.cfi_restore_state
	cmpl	$1, %edx
	jne	.L37
	jmp	.L38
	.cfi_endproc
.LFE1:
	.size	ravif2, .-ravif2
	.section	.text.unlikely
.LCOLDE3:
	.text
.LHOTE3:
	.ident	"GCC: (GNU) 5.1.0"
	.section	.note.GNU-stack,"",@progbits

  reply	other threads:[~2015-07-04 12:11 UTC|newest]

Thread overview: 47+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2015-01-01  0:00 Dibyendu Majumdar
2015-01-01  0:00 ` Dibyendu Majumdar [this message]
2015-01-01  0:00   ` Dibyendu Majumdar
2015-01-01  0:00     ` Dibyendu Majumdar
2015-01-01  0:00       ` Filed PR jit/66812 for the " David Malcolm
2015-01-01  0:00         ` David Malcolm
2015-01-01  0:00           ` David Malcolm
2015-01-01  0:00             ` David Malcolm
2015-01-01  0:00               ` David Malcolm
2015-01-01  0:00               ` Dibyendu Majumdar
2015-01-01  0:00                 ` David Malcolm
2015-01-01  0:00                   ` Dibyendu Majumdar
2015-01-01  0:00                     ` David Malcolm
2015-01-01  0:00                       ` Dibyendu Majumdar
2015-01-01  0:00                         ` Dibyendu Majumdar
2015-01-01  0:00                           ` David Malcolm
2015-01-01  0:00                             ` Dibyendu Majumdar
2015-01-01  0:00                               ` David Malcolm
2015-01-01  0:00                                 ` David Malcolm
2015-01-01  0:00                                   ` [PATCH] PR jit/66812: Candidate fix for for the code generation issue, v1 David Malcolm
2015-01-01  0:00                                     ` Dibyendu Majumdar
2015-01-01  0:00                                       ` David Malcolm
2015-01-01  0:00                                         ` Dibyendu Majumdar
2015-01-01  0:00                                           ` Dibyendu Majumdar
2015-01-01  0:00                                             ` David Malcolm
2015-01-01  0:00                                               ` Dibyendu Majumdar
2015-01-01  0:00                                                 ` Dibyendu Majumdar
2015-01-01  0:00                                 ` Filed PR jit/66812 for the code generation issue Dibyendu Majumdar
2015-01-01  0:00               ` Dibyendu Majumdar
2015-01-01  0:00                 ` Dibyendu Majumdar
2015-01-01  0:00                   ` Dibyendu Majumdar
2015-01-01  0:00                     ` Dibyendu Majumdar
2015-01-01  0:00                       ` Dibyendu Majumdar
2015-01-01  0:00                         ` Dibyendu Majumdar
2015-01-01  0:00                           ` David Malcolm
2015-01-01  0:00                             ` David Malcolm
2015-01-01  0:00                               ` Dibyendu Majumdar
2015-01-01  0:00                             ` Dibyendu Majumdar
2015-01-01  0:00             ` Dibyendu Majumdar
2015-01-01  0:00       ` A possible " David Malcolm
2015-01-01  0:00         ` Dibyendu Majumdar
2015-01-01  0:00           ` Dibyendu Majumdar
2015-01-01  0:00             ` Filed PR jit/66811: jit jumps aren't compilable as C (Re: A possible code generation issue) David Malcolm
2015-01-01  0:00               ` Filed PR jit/66811: jit dumps " David Malcolm
2015-01-01  0:00             ` A possible code generation issue Dibyendu Majumdar
2015-01-01  0:00               ` PR jit/66783 (Re: A possible code generation issue) David Malcolm
2015-01-01  0:00                 ` [PATCH, committed] PR jit/66783: prevent use of opaque structs David Malcolm

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=CACXZuxfKRkEzSjzPCvpSvL0EcryEofyL-xjgJLxByNQDNpBjTg@mail.gmail.com \
    --to=mobile@majumdar.org.uk \
    --cc=jit@gcc.gnu.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).