Skip to content

Commit

Permalink
Tests for :xform_hoist_lets
Browse files Browse the repository at this point in the history
Signed-off-by: Alastair Reid <alastair.reid@intel.com>
  • Loading branch information
alastairreid committed Feb 12, 2025
1 parent 5159e8e commit de440bd
Show file tree
Hide file tree
Showing 2 changed files with 74 additions and 0 deletions.
15 changes: 15 additions & 0 deletions tests/lit/xform_hoist_lets/test_00.asl
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
// RUN: %asli --batchmode --exec=:xform_hoist_lets --exec=":show --format=raw FUT" %s | filecheck %s
// Copyright (C) 2025-2025 Intel Corporation

func FUT(x : bits(32), i : integer {0..32}) => boolean
begin
// The original motivating example - this prevented use
// of a transformation that looked for "IsZero(x[_ +: _])"
return IsZero(__let wd : integer = 32-i __in
__let ix : integer = 31-i __in
x[ix +: wd]);
end

// CHECK: let wd : integer = asl_sub_int.0{}(32, i);
// CHECK: let ix : integer = asl_sub_int.0{}(31, i);
// CHECK: return IsZero.0{wd}({bits(32)}x[ix +: wd]);
59 changes: 59 additions & 0 deletions tests/lit/xform_hoist_lets/test_01.asl
Original file line number Diff line number Diff line change
@@ -0,0 +1,59 @@
// RUN: %asli --batchmode --exec=:xform_hoist_lets --exec=":show --format=raw FUT" %s | filecheck %s
// Copyright (C) 2025-2025 Intel Corporation

func FUT(i : integer) => boolean
begin
// Check that lets are not lifted past sequencing points

// AND
let r1 = i >= 0 && (__let t : integer = 10 __in i <= t);
// CHECK: asl_and_bool.0{}(asl_ge_int.0{}(i, 0), __let t : integer = 10 __in asl_le_int.0{}(i, t));
let r2 = i >= 0 && i <= (__let t : integer = 10 __in t);
// CHECK: asl_and_bool.0{}(asl_ge_int.0{}(i, 0), __let t : integer = 10 __in asl_le_int.0{}(i, t));

// OR
let r3 = i >= 0 || i <= (__let t : integer = 10 __in t);
// CHECK: asl_or_bool.0{}(asl_ge_int.0{}(i, 0), __let t : integer = 10 __in asl_le_int.0{}(i, t));

// IMPLIES
let r4 = i >= 0 --> i <= (__let t : integer = 10 __in t);
// CHECK: asl_implies_bool.0{}(asl_ge_int.0{}(i, 0), __let t : integer = 10 __in asl_le_int.0{}(i, t));

// IF expression
let r5 = if i >= 0 then i <= (__let t : integer = 10 __in t) else FALSE;
// CHECK: if asl_ge_int.0{}(i, 0) then __let t : integer = 10 __in asl_le_int.0{}(i, t) else FALSE;

// IF statement
if __let b1 : boolean = i >= 0 __in b1 then
let r6 = i <= (__let t : integer = 10 __in t);
else
let r7 = i <= (__let t : integer = 10 __in t);
end
// CHECK: let b1 : boolean = asl_ge_int.0{}(i, 0);
// CHECK-NEXT: if b1 then
// CHECK-NEXT: let t : integer = 10;
// CHECK-NEXT: let r6 : boolean = asl_le_int.0{}(i, t);
// CHECK-NEXT: else
// CHECK-NEXT: let t : integer = 10;
// CHECK-NEXT: let r7 : boolean = asl_le_int.0{}(i, t);
// CHECK-NEXT: end

// WHILE loop
while i <= (__let t : integer = 10 __in t) do
end
// CHECK: while __let t : integer = 10 __in asl_le_int.0{}(i, t) do
// CHECK-NEXT:
// CHECK-NEXT: end

// REPEAT loop
repeat
let x = 42;
until i <= (__let t : integer = 10 __in t);
// CHECK: repeat
// CHECK-NEXT: let x : integer{42} = 42;
// CHECK-NEXT: let t : integer = 10;
// CHECK-NEXT: until asl_le_int.0{}(i, t);

return r1 && r2 && r3 && r4 && r5;
end

0 comments on commit de440bd

Please sign in to comment.