vector_ptr_bitcast.ll 1.3 KB

1234567891011121314151617181920212223242526272829303132333435
  1. ; RUN: opt -S -instsimplify < %s | FileCheck %s
  2. target datalayout = "e-i64:64-f80:128-n8:16:32:64-S128"
  3. %mst = type { i8*, i8* }
  4. %mst2 = type { i32*, i32*, i32*, i32* }
  5. @a = private unnamed_addr constant %mst { i8* inttoptr (i64 -1 to i8*),
  6. i8* inttoptr (i64 -1 to i8*)},
  7. align 8
  8. @b = private unnamed_addr constant %mst2 { i32* inttoptr (i64 42 to i32*),
  9. i32* inttoptr (i64 67 to i32*),
  10. i32* inttoptr (i64 33 to i32*),
  11. i32* inttoptr (i64 58 to i32*)},
  12. align 8
  13. define i64 @fn() {
  14. %x = load <2 x i8*>, <2 x i8*>* bitcast (%mst* @a to <2 x i8*>*), align 8
  15. %b = extractelement <2 x i8*> %x, i32 0
  16. %c = ptrtoint i8* %b to i64
  17. ; CHECK-LABEL: @fn
  18. ; CHECK-NEXT: ret i64 -1
  19. ret i64 %c
  20. }
  21. define i64 @fn2() {
  22. %x = load <4 x i32*>, <4 x i32*>* bitcast (%mst2* @b to <4 x i32*>*), align 8
  23. %b = extractelement <4 x i32*> %x, i32 0
  24. %c = extractelement <4 x i32*> %x, i32 3
  25. %d = ptrtoint i32* %b to i64
  26. %e = ptrtoint i32* %c to i64
  27. %r = add i64 %d, %e
  28. ; CHECK-LABEL: @fn2
  29. ; CHECK-NEXT: ret i64 100
  30. ret i64 %r
  31. }