Files
clang-p2996/llvm/test/Transforms/SCCP/opaque-ptr.ll
Nikita Popov e3d87fd6e5 [IR][IPSCCP] Treat different function type as address taken (PR54258)
Without opaque pointers, this code currently treats a call through
a bitcast as the function being address taken, and IPSCCP relies
on this for correctness. Match the same behavior under opaque
pointers by checking that the function types are the same.

Fixes https://github.com/llvm/llvm-project/issues/54258.
2022-03-09 10:46:51 +01:00

40 lines
794 B
LLVM

; NOTE: Assertions have been autogenerated by utils/update_test_checks.py
; RUN: opt -S -ipsccp -opaque-pointers < %s | FileCheck %s
@g1 = internal global i32 1
@g2 = internal global i32 1
define i8 @test1() {
; CHECK-LABEL: @test1(
; CHECK-NEXT: [[V:%.*]] = load i8, ptr @g1, align 1
; CHECK-NEXT: ret i8 [[V]]
;
%v = load i8, ptr @g1
ret i8 %v
}
define void @test2() {
; CHECK-LABEL: @test2(
; CHECK-NEXT: store i8 2, ptr @g2, align 1
; CHECK-NEXT: ret void
;
store i8 2, ptr @g2
ret void
}
define internal i32 @test4() {
; CHECK-LABEL: @test4(
; CHECK-NEXT: ret i32 42
;
ret i32 42
}
define i64 @test3() {
; CHECK-LABEL: @test3(
; CHECK-NEXT: [[CALL:%.*]] = call i64 @test4()
; CHECK-NEXT: ret i64 [[CALL]]
;
%call = call i64 @test4()
ret i64 %call
}