brintos

brintos / llvm-project-archived public Read only

0
0
Text · 2.5 KiB · c0fda90 Raw
84 lines · plain
1; Checks if bitcasted call expression can be evaluated2; Given call expresion:3;   ptr @_ZL3fooP3Foo(ptr @gBar)4; We evaluate call to function @_ZL3fooP3Foo casting both parameter and return value5; Given call expression:6;   void @_ZL3bazP3Foo(ptr @gBar) 7; We evaluate call to function _ZL3bazP3Foo casting its parameter and check that evaluated value (nullptr)8; is handled correctly9 10; RUN: opt -passes=globalopt,instcombine -S %s -o - | FileCheck %s11 12; CHECK:      @gBar = local_unnamed_addr global %struct.Bar { i32 2 }13; CHECK-NEXT: @_s = local_unnamed_addr global %struct.S { i32 1 }, align 414; CHECK-NEXT: @llvm.global_ctors = appending global [0 x { i32, ptr, ptr }] zeroinitializer15 16; CHECK:      define i32 @main()17; CHECK-NEXT:   ret i32 018 19target datalayout = "e-m:o-i64:64-f80:128-n8:16:32:64-S128"20target triple = "x86_64-apple-macosx10.12.0"21 22%struct.Bar = type { i32 }23%struct.S = type { i32 }24%struct.Foo = type { i32 }25 26@gBar = global %struct.Bar zeroinitializer, align 427@_s = global %struct.S zeroinitializer, align 428@llvm.global_ctors = appending global [1 x { i32, ptr, ptr }] [{ i32, ptr, ptr } { i32 65535, ptr @_GLOBAL__sub_I_main.cpp, ptr null }]29 30define internal void @__cxx_global_var_init() section "__TEXT,__StaticInit,regular,pure_instructions" {31  call void @_ZN1SC1Ev_alias(ptr @_s)32  ret void33}34 35@_ZN1SC1Ev_alias = linkonce_odr unnamed_addr alias void (ptr), ptr @_ZN1SC1Ev36 37define linkonce_odr void @_ZN1SC1Ev(ptr) unnamed_addr align 2 {38  %2 = alloca ptr, align 839  store ptr %0, ptr %2, align 840  %3 = load ptr, ptr %2, align 841  call void @_ZN1SC2Ev(ptr %3)42  ret void43}44 45define i32 @main()  {46  %1 = alloca i32, align 447  store i32 0, ptr %1, align 448  ret i32 049}50 51define linkonce_odr void @_ZN1SC2Ev(ptr) unnamed_addr align 2 {52  %2 = alloca ptr, align 853  store ptr %0, ptr %2, align 854  %3 = load ptr, ptr %2, align 855  %4 = call ptr @_ZL3fooP3Foo(ptr @gBar)56  %5 = load i32, ptr %4, align 457  store i32 %5, ptr %3, align 458  call void @_ZL3bazP3Foo(ptr @gBar)59  ret void60}61 62define internal ptr @_ZL3fooP3Foo(ptr) {63  %2 = alloca ptr, align 864  store ptr %0, ptr %2, align 865  %3 = load ptr, ptr %2, align 866  store i32 1, ptr %3, align 467  %4 = load ptr, ptr %2, align 868  ret ptr %469}70 71define internal void @_ZL3bazP3Foo(ptr) {72  %2 = alloca ptr, align 873  store ptr %0, ptr %2, align 874  %3 = load ptr, ptr %2, align 875  store i32 2, ptr %3, align 476  ret void77}78 79; Function Attrs: noinline ssp uwtable80define internal void @_GLOBAL__sub_I_main.cpp() section "__TEXT,__StaticInit,regular,pure_instructions" {81  call void @__cxx_global_var_init()82  ret void83}84