Files
c3c/test/test_suite/expressions/elvis.c3t
Christoffer Lerno 3c15e495dd Add macro arguments &foo $foo #foo.
C ABI compatibility aarch64, win64, x86, x64
Added debug info
2020-11-22 22:16:19 +01:00

53 lines
1.0 KiB
C

func int* elvis(int *x, int *y)
{
return x ?: y;
}
func int* elvis2(int *x, int *y)
{
return x ?: (y ?: x);
}
func bool elvis3(bool x, bool y)
{
return x ?: y;
}
// #expect: elvis.ll
store i32* %0, i32** %x
store i32* %1, i32** %y
%2 = load i32*, i32** %x
%ptrbool = icmp ne i32* %2, null
br i1 %ptrbool, label %cond.phi, label %cond.rhs
cond.rhs:
%3 = load i32*, i32** %y
br label %cond.phi
cond.phi:
%val = phi i32* [ %2, %entry ], [ %3, %cond.rhs ]
ret i32* %val
store i32* %0, i32** %x
store i32* %1, i32** %y
%2 = load i32*, i32** %x
%ptrbool = icmp ne i32* %2, null
br i1 %ptrbool, label %cond.phi3, label %cond.rhs
cond.rhs:
%3 = load i32*, i32** %y
%ptrbool1 = icmp ne i32* %3, null
br i1 %ptrbool1, label %cond.phi, label %cond.rhs2
cond.rhs2:
%4 = load i32*, i32** %x
br label %cond.phi
cond.phi:
%val = phi i32* [ %3, %cond.rhs ], [ %4, %cond.rhs2 ]
br label %cond.phi3
cond.phi3:
%val4 = phi i32* [ %2, %entry ], [ %val, %cond.phi ]
ret i32* %val4