Skip to content
This repository was archived by the owner on Sep 2, 2018. It is now read-only.
This repository was archived by the owner on Sep 2, 2018. It is now read-only.

32 bit shift instructions are using missing libgcc symbols #163

Open
@seanmkauffman

Description

@seanmkauffman

LSHR and SHL with i32 operands are producing calls to libgcc symbols which don't exist. LSHR produces a call to __lshrsi3 and SHL produces a call to __ashlsi3.

The following programs demonstrate the problem.

LSHR:

define i32 @run(i32 %a, i32 %b) #0 {
  %1 = lshr i32 %a, %b
  ret i32 %1
}
define i32 @main() #1 {
  %1 = call i32 @run(i32 31, i32 31)
  ret i32 %1
}

SHL:

define i32 @run(i32 %a, i32 %b) #0 {
  %1 = shl nsw i32 %a, %b
  ret i32 %1
}
define i32 @main() #1 {
  %1 = call i32 @run(i32 31, i32 31)
  ret i32 %1
}

Metadata

Metadata

Assignees

No one assigned

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions