2
// Detect RAW violations. Cases taken from DV tables.
3
// This test is by no means complete but tries to hit the things that are
4
// likely to be missed.
20
cmpxchg8.acq r5 = [r6],r7,ar.ccv
28
// AR[FPSR].sf0.controls
30
fpcmp.eq.s0 f2 = f3, f4
33
// AR[FPSR].sf1.controls
35
fpcmp.eq.s1 f2 = f3, f4
38
// AR[FPSR].sf2.controls
40
fpcmp.eq.s2 f2 = f3, f4
43
// AR[FPSR].sf3.controls
45
fpcmp.eq.s3 f2 = f3, f4
49
fpcmp.eq.s0 f2 = f3, f4
54
fpcmp.eq.s1 f2 = f3, f4
59
fpcmp.eq.s2 f2 = f3, f4
64
fpcmp.eq.s3 f2 = f3, f4
70
fcmp.eq.s3 p1, p2 = f5, f6
116
fadd f0 = f1, f32 // read from rotating register region
197
// CR[IVR] (all writes are implicit in other resource usage)
227
mov r1 = cr.ivr // data
231
mov psr.l = r3 // other
254
// DTC_LIMIT/ITC_LIMIT
255
ptc.g r0, r1 // NOTE: GAS automatically emits stops after
256
ptc.ga r2, r3 // ptc.g/ptc.ga, so this conflict is no
257
;; // longer possible in GAS-generated assembly
272
mov f3 = f2 // no DV here
279
ld8.c.clr r0 = [r1] // no DV here
297
mov r3 = cr.ivr // several DVs
310
// ITC_LIMIT (see DTC_LIMIT)
345
cmp.eq p1, p2 = r0, r1 // pr-writer/pr-reader-nobr-nomovpr
348
mov pr = r5, 0xffff // mov-to-pr-allreg/pr-reader-nobr-nomovpr
351
fcmp.eq p5, p6 = f2, f3 // pr-writer-fp/pr-reader-br
354
cmp.eq p7, p8 = r11, r12
355
(p7) br.cond.sptk b1 // no DV here
360
(p63) add r0 = r1, r2
362
fcmp.eq p62, p63 = f2, f3
363
(p63) add r3 = r4, r5
365
cmp.eq p62, p63 = r6, r7 // no DV here
366
(p63) br.cond.sptk b0
381
mov r0 = r15 // no DV here, since gr < 16
383
bsw.1 // GAS automatically emits a stop after bsw.n
384
mov r1 = r16 // so this conflict is avoided
407
mov ar.bsp = r8 // no DV here
410
mov r9 = ar.bsp // no DV here
413
mov cr.ifa = r10 // any mov-to/from-cr is a DV
416
mov r11 = cr.eoi // any mov-to/from-cr is a DV
419
// PSR.da (rfi is the only writer)
420
// PSR.db (also ac,be,dt,pk)
426
// PSR.dd (rfi is the only writer)
450
// PSR.ed (rfi is the only writer)
456
// PSR.ia (no DV semantics)
467
mov r1 = cr.irr0 // no DV here
471
// PSR.id (rfi is the only writer)
472
// PSR.is (br.ia and rfi are the only writers)
473
// PSR.it (rfi is the only writer)
479
// PSR.mc (rfi is the only writer)
503
// PSR.ri (no DV semantics)
515
mov r1 = ar.ec // no DV here
529
// PSR.ss (rfi is the only writer)
543
ld8 r2 = [r0] // data
546
mov r6 = rr[r7] // impliedf
552
// GR%, additional cases
555
addl r3 = 12345, r2 // impliedf, IA64_OPND_R3_2
559
mov r8 = r32 // impliedf
563
cmp.eq p21, p22 = r0, r1 // pr-writer/pr-reader-nobr-nomovpr
564
(p21) add r2 = r3, r4
566
mov pr = r5, 0x1ffff // mov-to-pr-allreg/pr-reader-nobr-nomovpr
567
(p22) add r6 = r7, r8
569
mov pr.rot = 0xffff0000 // mov-to-pr-rotreg/pr-reader-nobr-nomovpr
570
(p23) add r9 = r10, r11
572
fcmp.eq p25, p26 = f2, f3 // pr-writer-fp/pr-reader-br
573
(p25) br.cond.sptk b0
575
cmp.eq p27, p28 = r11, r12
576
(p27) br.cond.sptk b1 // no DV here